#include<iostream.h>
void main()
{int a,sum=0,num=0;
cin>>a;
int b[5];
int base=10000,count=0;
for(int i=5;i>0;i--)
{
if(a/base)
{
num++;
b[i-1]=(a/base)%10;
sum=sum+b[i-1];
base=base/10;
}
else
{base=base/10;
continue;}
}
for(int j=0;j<5;j++)
{
cout<<b[j]<<endl;;
}
cout<<"输入数的位数为"<<num<<endl;
cout<<"各位的和为"<<sum<<endl;
}
这个程序只能计算5位以内的,而且输出一定是5个数,若输入不是5个的,输出数组的后几位就会乱码,如下:
高手们提醒一下我错在哪了,或者用什么方法能更好的实现这个功能,谢啦!!
16 个解决方案
#1
算之前先数一下位数呗,然后 new 一个同样长度的数组。
#2
int i=0,j,sum=0,num;
while(a!=0)
{
b[i++]=a%10;
a=a/10;
}
for(j=0;j<i;j++)
sum+=b[j];
for(j=0;j<i;j++)
num+=b[i-j-1]*pow(j,10);
#3
下面程序对输入>=0且在范围内的整数有效。对负数及任意长度的数的情况,楼主可思考下
#include<iostream>
using namespace std;
void main()
{
int a,sum=0,num=0,r;
cin>>a;
do
{
r = a%10;
a = a/10;
sum += r;
cout<<r;
num++;
}while(a);
cout<<endl;
cout<<"输入数的位数为"<<num<<endl;
cout<<"各位的和为"<<sum<<endl;
}
#4
那样不是只能输入固定长度的数,那要长度不固定呢
#5
看下2楼
#6
加上#include<math.h>
pow(i,10) => i的10次方
pow(i,10) => i的10次方
#7
不固定的用字符串处理了,把你的数字字符转换成数字就可以了
#8
前面的b[i]数组是怎么定义的
#9
能具体点吗?用的是什么函数?
#10
貌似有点错误 我改下
#11
#include<stdio.h>
#include<math.h>
main()
{
int a=1243;
int b[10];
int i=0,j,sum=0,num=0;
while(a!=0)
{
b[i++]=a%10;
a=a/10;
}
for(j=0;j<i;j++)
sum+=b[j];
for(j=0;j<i;j++)
num+=b[i-j-1]*pow(10,j);
printf("%d,%d",sum,num);
}
#12
pow(10,i) => i的10次方
#13
void main()
{int a,sum=0,num=0;
cin>>a;
int b[5];
int base=10000,count=0;
for(int i=4;i>=0;i--)
{
if(a/base)
{
num++;
b[i]=(a/base)%10;
sum=sum+b[i];
base=base/10;
}
else
{
b[i]=0;//修改处
base=base/10;
}
}
for(int j=0;j<5;j++)
{
cout<<b[j]<<endl;;
}
cout<<"输入数的位数为"<<num<<endl;
cout<<"各位的和为"<<sum<<endl;
}
#14
你说的是不定长的数据,那你就这样,用string来存储,然后取出数据,进行转换为int数据类型就可以了
#15
其实你没明白我的意思,我是想手动输入,然后倒序,3楼写的已经很好了,同样谢谢。。。
#16
要求将输入的 数值倒序输出,并计算位数和各位的和?
#1
算之前先数一下位数呗,然后 new 一个同样长度的数组。
#2
int i=0,j,sum=0,num;
while(a!=0)
{
b[i++]=a%10;
a=a/10;
}
for(j=0;j<i;j++)
sum+=b[j];
for(j=0;j<i;j++)
num+=b[i-j-1]*pow(j,10);
#3
下面程序对输入>=0且在范围内的整数有效。对负数及任意长度的数的情况,楼主可思考下
#include<iostream>
using namespace std;
void main()
{
int a,sum=0,num=0,r;
cin>>a;
do
{
r = a%10;
a = a/10;
sum += r;
cout<<r;
num++;
}while(a);
cout<<endl;
cout<<"输入数的位数为"<<num<<endl;
cout<<"各位的和为"<<sum<<endl;
}
#4
那样不是只能输入固定长度的数,那要长度不固定呢
#5
看下2楼
#6
加上#include<math.h>
pow(i,10) => i的10次方
pow(i,10) => i的10次方
#7
不固定的用字符串处理了,把你的数字字符转换成数字就可以了
#8
前面的b[i]数组是怎么定义的
#9
能具体点吗?用的是什么函数?
#10
貌似有点错误 我改下
#11
#include<stdio.h>
#include<math.h>
main()
{
int a=1243;
int b[10];
int i=0,j,sum=0,num=0;
while(a!=0)
{
b[i++]=a%10;
a=a/10;
}
for(j=0;j<i;j++)
sum+=b[j];
for(j=0;j<i;j++)
num+=b[i-j-1]*pow(10,j);
printf("%d,%d",sum,num);
}
#12
pow(10,i) => i的10次方
#13
void main()
{int a,sum=0,num=0;
cin>>a;
int b[5];
int base=10000,count=0;
for(int i=4;i>=0;i--)
{
if(a/base)
{
num++;
b[i]=(a/base)%10;
sum=sum+b[i];
base=base/10;
}
else
{
b[i]=0;//修改处
base=base/10;
}
}
for(int j=0;j<5;j++)
{
cout<<b[j]<<endl;;
}
cout<<"输入数的位数为"<<num<<endl;
cout<<"各位的和为"<<sum<<endl;
}
#14
你说的是不定长的数据,那你就这样,用string来存储,然后取出数据,进行转换为int数据类型就可以了
#15
其实你没明白我的意思,我是想手动输入,然后倒序,3楼写的已经很好了,同样谢谢。。。
#16
要求将输入的 数值倒序输出,并计算位数和各位的和?