求救:编程计算一整数各位数之和.(C语言)

来源:百度知道 编辑:UC知道 时间:2024/05/13 09:18:10
#include<stdio.h>
int main(void)
{
/* 空格*/unsigned int num, and=0, mun, i;
/* 空格*/printf("请输入一个数字:\n");
/* 空格*/scanf("%u",&num);

/* 空格*/for(i=10;num/i!=0;)
/* 空格*/{
/* 空格*//* 空格*/and+=num%i;
/* 空格*//* 空格*/num=num/i;
/* 空格*/}
/* 空格*/printf("%u \n",and);
/* 空格*/return 0;
}

and指的是结果,for循环的意思是每次都测试num除以10是否为零。在C语言中,整除除以整数的结果是截断的,也就是说只取整数部分。举个例子5/3=2.666,取整就是2.num%i的意思是取num除以i的余数,也就是num的个位数,num=num/i的意思是把num除以10,相当于去掉num的个位数。例如1234除以10,得123.4,由于结果只取整数部分,所以得123。以此类推就能得到一个数所有位数之和了。
你的程序还有点小问题,就是for循环里的num/i!=0,如果写成这样,就会少计算一位,导致结果不正确。
应该改为for(i=10;num!=0;)

for(i=10;num/i!=0;)

改为

for(i=10;num!=0;)

#include <math.h> // for ceil(), log()

unsigned int sumRecur(unsigned i)
{
//获取总高位的掩码,例如:124->mask=100, 1246->mask=1000
unsigned int mask = static_cast<unsigned int>(
pow(10,static_cast<unsigned int>(log(i)/log(10))));
return i<10&&i>=0?i:i/mask+sumRecur(i%mask);
}

int main(void)
{
unsigned int num;
printf("请输入一个正整数:\n");
scanf("%u",&num);

printf("数位和:%u\n", sumRecur(num));

return 0;
}