首页 > 用户发贴区 > 编程问题提问区 > 自己写的一个小程序 有问题帮帮忙
2010
01-27

自己写的一个小程序 有问题帮帮忙

题目:任意输入一个五位数 求个位之和 比如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;

后面两个怎么是负的了?求大家帮忙


自己写的一个小程序 有问题帮帮忙》有 4 条评论

  1. chameleons 说:

    逻辑没有错误。我试编译运行了一下,同样的数据也没发现错误。
    估计跟编译器有关。你看你的那些变量都是unsigned long,但是两个函数complementation和divide的参数定的是int,不匹配。等于是把unsigned long往下转成int。某些特定的编译器就不成了。

  2. erwinrommel1945 说:

    谢谢 我也发现了 函数里面定义int是错误的 应该也定义成unsigned long

  3. mapengfei 说:

    针对不同编译器它定义的类型之间的界限不是很透明,有时候INT类型和~无符号长整形数据在内存中所占字节相同或不同,就会出现上面的现象

  4. lzbstar 说:

    main()
    {
    int a[5], i, sum = 0;
     for(i=0; i<5; i++)
     {
        a = getchar();
     sum += (a
    – 48);
     }

    printf(“%d”, sum);

    }

    这么貌似可以的

留下一个回复