c语言,输入一个整数,求它的位数。如1234的位数是4.我编写了以后,凡是位数大于10的都显示9位这是为什么

供稿:hz-xin.com     日期:2025-01-13
C语言编程:输入一个整数,求它的位数以及各位数字之和。

#include


int main()
{
int n,count,sum,tmp;
printf("Input an integer:");
while(scanf("%d",&n)!=EOF && n>=0)
{
count=1;
sum=0;
while(n>0)
{
tmp=n%10;
sum+=tmp;
n = n/10;
if(n>0)
{
count++;
}
}
printf("count=%d,sum=%d
",count,sum);
printf("Input an integer:");
}
return 0;
}

一:
#include
void main()
{
int a,i=0,sum=0;
scanf("%d",&a);
while(a)
{
sum+=(a%10);//sum是个位数之和
a/=10;
i++;//i为位数
}
printf("%d位数, 各位数字之和为%d
",i,sum);
}

二:
#include
int issxh(int number)
{
int x1,x2,x3;
x1=number/100; //百位数
x2=(number/10)%10; //十位数
x3=number%10; //个位数
if(x1*x1*x1+x2*x2*x2+x3*x3*x3==number)
return 1;
else
return 0;
}
void main()
{
int m,n;
scanf("%d%d",&m,&n);
for (int i=m;i<=n;i++)
{
if(issxh(i))
printf("%d ",i);
}
}

如果你超出定义变量类型所能存储的最大值 他会溢出,通常计算机会进行循环处理


假设 int 最多能表示到10  你输入11  ,他会输出为1, 同理,你的程序输入的数字超出int 


能表示的最大范围他会溢出处理 ,所得到的结果 可能是1位数 可能是2位数 。。。, 你说每次都是9位


是个巧合

我用你的程序跑了下 输入11位 1 ,输出的就是个10位数

.


我输入一个刚大于最大值1的数 就变位1位数了



因为,int4个字节,它表示的范围为-2^31~2^31-1
所以你输入的数值超出了这个范围,那么它就截取后面的,所以当你输入大于10位的数值时,它有可能输出9,也可能输出10的,
可以考虑用字符串来存储数字,这样就可以输出很多位了啦

应该把x定义成long吧,int只有四个字节,数值范围是-2147483678~2147483677

你算的是地址位数,而不是地址内容的位数,你所输入的应该是地址的内容吧、、、

X定义为int 显然不行。长整型也不能完全解决问题。。
最佳办法是定义为str 然后判断字符串长度

C语言 编写一个程序,输入一个正整数,求出它是几位数。
\/*功能:输入一个任意长度的正整数,求出它是几位数。*\/ include<stdio.h> int main(){ int number;int count = 0;\/\/记录个数 scanf("%d", &number);if (number == 0){ printf("number is %d\\n",count+1);\/\/0是一位数 }else { while (number != 0){ number = number \/ 10...

C语言怎样做输入一个数读出它的位数
main(){ int a[N],i,count=0;printf("请输入一个位数不大于5的正整数\\n");for(i=0;i<5;i++){ scanf("%d",&a[i]);count++;} printf("位数是\\n");printf("%d\\n",count);getchar();getchar();} 注意for循环里面的count++,那就是循环一次count加一次,最后输出count 它的...

c语言求整数的位数
输入一个不多于4位的正整数,求它的位数,并按逆序输出各位数字,可以参考下面的代码:include<stdio.h> int main(){ int n, ans = 0;scanf("%d", &n);printf("逆序输出:");while(n != 0){ int t;t = n % 10;n \/= 10;ans++;printf("%d ", t);} puts("");printf("位数...

c语言:输入一个整数求它有几位。看图,哪里错...
读入字符串,然后强制类型转化为整形。假如0算一位,初始i=1位 首先判断是否有数字输入,假设有且能够转化为整形 也可以使用scanf直接读入一个整数 然后那转化的整形和10相除,并保存相除的结果,while 结果不等于0,则i++ 当等于零时则说明最后一位小于10.整数相除说明,在c语言中3\/5=0 ...

从键盘上输入一个整数,分别输出它的个位数、十位数和百位数。
if ((x > 99) && (x < 1000)) { \/*&&是并且的意思,这个if用来判断输入的是不是三位数*\/ a = n % 10; \/*a是n的百位数,a % b表示a除以b的余数(a,b都是整数)*\/ b = n \/ 10 % 10; \/*b是n的十位数.因为n是整数,所以n\/10的结果是n除以10的商*\/ c = n \/ ...

C语言编程 给一个任意的整数,求出它是几位数
include "Stdio.h"include "Conio.h"int main(void){ long n;int i=0;scanf("%ld",&n);while(n){ i++;n=n\/10;} printf("%d",i);getch();return 0;} \/\/如果数字超过了long 的范围 \/\/就用char *ch 去接受那个数 \/\/加个'\\0'\/\/最后直接strlen就OK了 ...

(1) 输入一个整数,求它的位数。例如,123的位数是3,请使用do-while语句实...
include <stdio.h> int main(){ int n,count,tmp;printf("Input an integer:");while(scanf("%d",&n)!=EOF && n>=0){ count=1;while(n>0){ tmp=n%10;n = n\/10;if(n>0){ count++;} } printf("count=%d\\n", count);} return 0;} ...

两道C语言编程题:一、输入一个整数,求它的位数以及各位数字之和。
一:include <stdio.h> void main(){ int a,i=0,sum=0;scanf("%d",&a);while(a){ sum+=(a%10);\/\/sum是个位数之和 a\/=10;i++;\/\/i为位数 } printf("%d位数, 各位数字之和为%d\\n",i,sum);} 二:include <stdio.h> int issxh(int number){ int x1,x2,x3;x1=number\/...

输入一个整数,求它的位数以及各位数字之和。例如345的位数是3,各位数 ...
include <stdio.h>int main(){ int n,count,sum,tmp; printf("Input an integer:"); while(scanf("%d",&n)!=EOF && n>=0) { count=1; sum=0; while(n>0) { tmp=n%10; sum+=tmp; n = n\/10; if(n>0) { count++; } }...

c语言,输入一个整数,求它的位数。如1234的位数是4.我编写了以后,凡是位 ...
假设 int 最多能表示到10 你输入11 ,他会输出为1, 同理,你的程序输入的数字超出int 能表示的最大范围他会溢出处理 ,所得到的结果 可能是1位数 可能是2位数 。。。, 你说每次都是9位 是个巧合 我用你的程序跑了下 输入11位 1 ,输出的就是个10位数 .我输入一个刚大于最大值1的...