本周有一道题目:
下面将陆续列出不同同学设计的的程序,各有千秋,肥瘦不同,但结果相同,大家喜欢谁?从中也可以看出设计程序美妙!
原题:编程实现,输入一个整数,计算整数是几位数,输出各位数,并计算各位数的总和。
同学一:排骨型
#include <iostream>
using namespace std;
int main()
{
int num,i=0,add=0;//i作为计数
cout << "请输入一个数字:" << endl;
cin >> num;
while (num!=0)
{
add=add+num%10;//求模得个位上数值且相加
num=num/10;//降低一位
i++;
}
cout << "该数由"<<i<<"位组成,各个数位上数之和为:"<<add<<endl;
return 0;
}
同学二:丰满型
/***************************************************
*** 功能:计算一个整数的位数,输出各位数, ***
*** 计算各位数的总和 ***
*** BY:HH ***
***************************************************/
#include<iostream>
using namespace std;
int main()
{
long int number,num;
int weishu=0,tmp,sum=0;
cout<<" 请输入一个小于十位的整数:";//长整形最大也就识别十位,再高多一位就溢出了。
cin>>number; //输入一个数并保存到number中
for(num=10;num<=10000000000;num=num*10) //开始判断,一开始比较值设置为10,不设为1是因为任何数除以1都是本身
{ //每次执行语句之后,num的值都要乘以10,即进一位。
weishu++;
if(number<num) //当我们输入的数小于一直在增加的num值后,我们就退出循环。
break;
}
cout<<"\n******************************\n";
cout<<" 位数:"<<weishu; //将位数打印出来
cout<<"\n******************************\n";
cout<<" 各位上的数分别为:"; // 以下为打印各位上的数字,有些人或许会问,可不可以用If.
while(num>1) //答案是可以,但还要增加一个goto语句。因为goto语句降低了程序的可读性,所以一般不采取
{
num=num/10; //利用我们上面的比较的num值来做除数
tmp=number/num; //先算出最高位的数字
number=number%num; //除去最高位的数字,取剩下的数字并存放在number中
sum+=tmp; //将各位上的数字逐个相加
cout<<tmp<<' '; //每取出一个数就打印一次。
}
cout<<"\n******************************\n";
cout<<" 各位上的数值之和: "<<sum<<"\n";
return 0;
}
同学三:一板一眼忠厚型
#include <iostream>
using namespace std;
int main()
{
long sum=0,num,j,k,i=0; //i存放它是几位数字,sum存放各个位数相加之和,num获取数字
cout<<"请输入一个整数"<<endl;
cin>>num;
k=num;
while(num!=0) //计算它是几位数字
{
num=num/10;
i++;
}
cout<<"它总共由"<<i<<"位数字组成"<<endl;
for(j=0;j<i;j++) //计算各个位数相加之和
{
sum+=k%10;
k=k/10;
}
cout<<"各个位数相加之和为"<<sum<<endl;
return 0;
}
同学四:还属小胖型,但是一个可爱小胖。
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a,b,c,d=0;
cout<<"please input a number"<<endl;
cin>>a;
for(b=10;b<=a;b*=10)
{
if(a/b>1)
c=1;
d+=c;
}
cout<<"这是一个"<<d+1<<"位数"<<endl;
d=0;
for(b=b/10;b>=1;b=b/10)
{
c=a/b;
d+=c;
a%=b;
}
cout<<"各位数之和等于:"<<d<<endl;
return 0;
}
程序五:妩媚卖弄型
/***************************************************
** 输入一个整数并求其位数以及输出各位数之和 **
** 自动化1121 李庆典 **
***************************************************/
#include<iostream> //预编译处理命令
#include<math.h> //调用数学函数
using namespace std; //标准名字空间
int main () //主函数
{
long a;
int b;
int c=0;
double d=0;
int e=0,f=0;
cout<<"请输入所要求的整数"<<endl; //输入一个整数
cin>>a;
while(d<=a) //判断该整数的位数
{
d=pow(double(10),c);
c++;
}
cout<<"该数为"<<c-1<<"位数"<<endl; //输出位数
cout<<"该数字各位数上的数字为"<<endl;
c=c-2; //循环计算并输出各位数上的数值
while(c>=0)
{
d=pow(double(10),c);
e=a/d;
cout<<e<<endl;
a=a-e*d;
f+=e;
c--;
}
cout<<endl;
cout<<"这些数字的和为"<<f<<endl<<endl; //输出和
system("pause"); //结束程序
}