回 帖 发 新 帖 刷新版面

主题:简单小程序帮帮忙啊~

谁能帮我编下啊~谢谢了啊~
int num
计算出所有各位上得数字总和,比如数字是1256,SUM=1+2+5+6=14;
请大家帮帮忙啊~!!!

回复列表 (共16个回复)

沙发

可以先把数字转换成字符串 用itoa()函数

板凳

不行的~要能接受输入任意的INT数~
听人家说取模啊~我不会用啊~

3 楼

怎样计算数字的长度啊?

4 楼

取以10为底的对数再加1。
比如你输入的是299,log299的整数部分就是2,如果是1244,整数值就是3
知道了数的位数之后求每一位的值就很简单了。
用n表示你输入的整数,
int m = n/(10*((int)(log(n))+1));m就是最高位,然后
n-m*10^(log(n)+1)就是丢掉最高位之后的次高位,依次类推,只要控制好循环,问题就解决了。
等着看你的好消息!

5 楼

还有一个取模的方法

int total = 0 ; //数字总和

while (num)     
{
    total = total + num % 10 ;  //num % 10  取个位上数字, 例对于1256 , num %10 为6
     num  = num / 10 ;          //num / 10  将num 向后移位对于1256, num / 10 为125
}

num

6 楼

还是药店厉害啊,简单明了

7 楼

同意药店的设计思想,我也有取模的想法,只是位数推移更加简化程序,不知道还有否更为简单的设计思想!

8 楼

/*一般的算法,绝对可用*/
#include<stdio.h>
void main()
{
int num=123456,s=0,t;
while(num>0)
{
t=num;
num=num/10;
s+=t-num*10;
}
printf("%d",s);
}

9 楼

此程序是小弟用数组和ascii码搞出来的,不过有小小漏洞,请见谅:
  #include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main()
{
int size,n,sum=0,a;
int *num;
puts("请问你所要输入的整数是几位:");
cin>>size;

    puts("请你输入一个整数:");
num=new int[size+1];

for(n=0;n<size;n++)
{ num[n]=getche();
  a=num[n]-48;
      sum+=a;
}
cout<<endl<<"你所输入的整数的各位数相加后的结果是:"<<sum<<endl;
delete []num;
}

10 楼

/*仅供高手研究*/
#include <stdio.h>
#include<stdlib.h>
void main()
{
int num=12345,s=0;char *p;
p=(char *)malloc(30);
itoa(num,p,10);
while(*p)
{
s+=*p-'0';
p++;
}
printf("%d",s);
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册