//你写的好复杂呀,所以没有仔细看下去
//就重写了一个
//至于pow()的问题,我试了一下结果正确
//但是可能的原因是 pow()的返回值是double
//型的,你用int型的变量去接收精度丢失了吧
int main(void)
{
int n
int a //记录 n%10
int num = 0//记录 1 的个数
printf("Input n:")
scanf("%d",&n)
while(n)
{
a = n % 10
if(a == 1)
num++
n = n / 10
}
printf("num = %d\n",num)
return 0
}
#include <stdio.h>#include <stdlib.h>
int numCnt(int num) {
int nRet = 0
// 将数字转换成字符串,然后解析字符串即可
char chNum[10] = {'\0'}
char *p = chNum
sprintf(chNum, "%d", num)
// 只要解析到就行了
while ('\0' != *p) {
if ('1' == *(p++)) {
nRet++
printf("yes to change [%d] - %d \n", num, nRet)
}
}
return nRet
}
int main(void)
{
int num
int nCnt = 0
printf("Please Input n : ")
scanf("%d", &num)
for (int i = 1 i <= num i++) {
nCnt += numCnt(i)
}
// if (num >= 10) nCnt += 1
printf("the count is: %d\n", nCnt)
return 0
}