主题:简单小程序帮帮忙啊~
DragonCat
[专家分:0] 发布于 2003-07-02 21:04:00
谁能帮我编下啊~谢谢了啊~
int num
计算出所有各位上得数字总和,比如数字是1256,SUM=1+2+5+6=14;
请大家帮帮忙啊~!!!
回复列表 (共16个回复)
沙发
hoofa [专家分:550] 发布于 2003-07-02 21:10:00
可以先把数字转换成字符串 用itoa()函数
板凳
DragonCat [专家分:0] 发布于 2003-07-02 21:16:00
不行的~要能接受输入任意的INT数~
听人家说取模啊~我不会用啊~
3 楼
ulinzi [专家分:0] 发布于 2003-07-02 22:24:00
怎样计算数字的长度啊?
4 楼
meteor135 [专家分:6060] 发布于 2003-07-02 22:50:00
取以10为底的对数再加1。
比如你输入的是299,log299的整数部分就是2,如果是1244,整数值就是3
知道了数的位数之后求每一位的值就很简单了。
用n表示你输入的整数,
int m = n/(10*((int)(log(n))+1));m就是最高位,然后
n-m*10^(log(n)+1)就是丢掉最高位之后的次高位,依次类推,只要控制好循环,问题就解决了。
等着看你的好消息!
5 楼
天字号药店 [专家分:1010] 发布于 2003-07-03 06:00:00
还有一个取模的方法
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 楼
spg [专家分:210] 发布于 2003-07-03 09:41:00
还是药店厉害啊,简单明了
7 楼
jy00806571 [专家分:0] 发布于 2003-07-03 20:04:00
同意药店的设计思想,我也有取模的想法,只是位数推移更加简化程序,不知道还有否更为简单的设计思想!
8 楼
hoofa [专家分:550] 发布于 2003-07-03 21:22:00
/*一般的算法,绝对可用*/
#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 楼
lheng [专家分:1490] 发布于 2003-07-03 21:37:00
此程序是小弟用数组和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 楼
hoofa [专家分:550] 发布于 2003-07-03 21:52:00
/*仅供高手研究*/
#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);
}
我来回复