题目:任意输入一个五位数 求个位之和 比如12345 即求1+2+3+4+5
#include “stdio.h”
main()
{
unsigned long divide(int m);
unsigned long complementation(int n);
unsigned long a,sum;
sum=0;
printf(“Please enter a five bit number:”);
scanf(“%d”,&a);
do
{
sum+=complementation(a);
a=divide(a);
}while(a!=0);
printf(“The sum of every bit is %d\n”,sum);
}
unsigned long complementation(int n)
{
return n%10;
}
unsigned long divide(int m)
{
return m/10;
}
小弟发现自己这个程序有时候可以得到正确结果 又时候又不行
我自己实验的结果如下:
12345 15;
23569 25;
30001 4;
39999 -22;
56897 -26;
后面两个怎么是负的了?求大家帮忙
>> 本文固定链接: http://www.vcgood.com/archives/3346
>> 转载请注明: erwinrommel1945 2010年01月27日 于 C语言帝国 发表
逻辑没有错误。我试编译运行了一下,同样的数据也没发现错误。
估计跟编译器有关。你看你的那些变量都是unsigned long,但是两个函数complementation和divide的参数定的是int,不匹配。等于是把unsigned long往下转成int。某些特定的编译器就不成了。
谢谢 我也发现了 函数里面定义int是错误的 应该也定义成unsigned long
针对不同编译器它定义的类型之间的界限不是很透明,有时候INT类型和~无符号长整形数据在内存中所占字节相同或不同,就会出现上面的现象
main()
{
int a[5], i, sum = 0;
for(i=0; i<5; i++)
{
a = getchar();
sum += (a – 48);
}
printf(“%d”, sum);
}
这么貌似可以的