关于倒序输出数值

时间:2023-02-13 20:40:33
今天在写一道编程题,要求将输入的数值倒序输出,并计算位数和各位的和。我写的程序如下
#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


引用 1 楼 ri_aje 的回复:
算之前先数一下位数呗,然后 new 一个同样长度的数组。

那样不是只能输入固定长度的数,那要长度不固定呢

#5


关于倒序输出数值看下2楼

#6


加上#include<math.h>

pow(i,10)  => i的10次方

#7


引用 4 楼 mghhz816210 的回复:
引用 1 楼 ri_aje 的回复:算之前先数一下位数呗,然后 new 一个同样长度的数组。
那样不是只能输入固定长度的数,那要长度不固定呢

不固定的用字符串处理了,把你的数字字符转换成数字就可以了

#8


引用 6 楼 zhuankeshumo 的回复:
加上#include<math.h>

pow(i,10)  => i的10次方

前面的b[i]数组是怎么定义的

#9


引用 7 楼 ganpengjin1 的回复:
引用 4 楼 mghhz816210 的回复:引用 1 楼 ri_aje 的回复:算之前先数一下位数呗,然后 new 一个同样长度的数组。
那样不是只能输入固定长度的数,那要长度不固定呢
不固定的用字符串处理了,把你的数字字符转换成数字就可以了

能具体点吗?用的是什么函数?

#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


引用 9 楼 mghhz816210 的回复:
引用 7 楼 ganpengjin1 的回复:引用 4 楼 mghhz816210 的回复:引用 1 楼 ri_aje 的回复:算之前先数一下位数呗,然后 new 一个同样长度的数组。
那样不是只能输入固定长度的数,那要长度不固定呢
不固定的用字符串处理了,把你的数字字符转换成数字就可以了
能具体点吗?用的是什么函数?
关于倒序输出数值
你说的是不定长的数据,那你就这样,用string来存储,然后取出数据,进行转换为int数据类型就可以了

#15


引用 11 楼 zhuankeshumo 的回复:
C/C++ code123456789101112131415161718#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];f……

其实你没明白我的意思,我是想手动输入,然后倒序,3楼写的已经很好了,同样谢谢。。。

#16


引用 15 楼 mghhz816210 的回复:
引用 11 楼 zhuankeshumo 的回复:C/C++ code123456789101112131415161718#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(……

要求将输入的 数值倒序输出,并计算位数和各位的和?

#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


引用 1 楼 ri_aje 的回复:
算之前先数一下位数呗,然后 new 一个同样长度的数组。

那样不是只能输入固定长度的数,那要长度不固定呢

#5


关于倒序输出数值看下2楼

#6


加上#include<math.h>

pow(i,10)  => i的10次方

#7


引用 4 楼 mghhz816210 的回复:
引用 1 楼 ri_aje 的回复:算之前先数一下位数呗,然后 new 一个同样长度的数组。
那样不是只能输入固定长度的数,那要长度不固定呢

不固定的用字符串处理了,把你的数字字符转换成数字就可以了

#8


引用 6 楼 zhuankeshumo 的回复:
加上#include<math.h>

pow(i,10)  => i的10次方

前面的b[i]数组是怎么定义的

#9


引用 7 楼 ganpengjin1 的回复:
引用 4 楼 mghhz816210 的回复:引用 1 楼 ri_aje 的回复:算之前先数一下位数呗,然后 new 一个同样长度的数组。
那样不是只能输入固定长度的数,那要长度不固定呢
不固定的用字符串处理了,把你的数字字符转换成数字就可以了

能具体点吗?用的是什么函数?

#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


引用 9 楼 mghhz816210 的回复:
引用 7 楼 ganpengjin1 的回复:引用 4 楼 mghhz816210 的回复:引用 1 楼 ri_aje 的回复:算之前先数一下位数呗,然后 new 一个同样长度的数组。
那样不是只能输入固定长度的数,那要长度不固定呢
不固定的用字符串处理了,把你的数字字符转换成数字就可以了
能具体点吗?用的是什么函数?
关于倒序输出数值
你说的是不定长的数据,那你就这样,用string来存储,然后取出数据,进行转换为int数据类型就可以了

#15


引用 11 楼 zhuankeshumo 的回复:
C/C++ code123456789101112131415161718#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];f……

其实你没明白我的意思,我是想手动输入,然后倒序,3楼写的已经很好了,同样谢谢。。。

#16


引用 15 楼 mghhz816210 的回复:
引用 11 楼 zhuankeshumo 的回复:C/C++ code123456789101112131415161718#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(……

要求将输入的 数值倒序输出,并计算位数和各位的和?