这道题内容是这样的:
将一个数字,各个位数上数相乘,若得到的数字不是个位数,则继续循环下去,直到为个位数为之。(PS:最后一位数后面无空格)
例:
input
396
output
396 162 12 2(2后面无空格)
input
95
output
95 45 20 0
input
40
output
40 0
intput
4
output
4
我的思路是:
刚开始我的想法是 一个while循环,里面一堆if来判断所输入的n为几位数,并算出各个位置上的数的积,然后再continue,如果不是个位数,就一直while下去。
后来发现,工作量太大了,这个没有说所输入n的位数,也就代表要将int型能放下最大的数都要判断下去,所以只能换一种方法。
最终 我用的方法就是设置一个k,初始为1,将k与n%10的值相乘,并再赋给k,n%10就是n的个位数,然后再将n/10,这样n的最后一位就丢失了,最后k就是各个位置上的数的积,再判断k是否为个位数,不是,则再while下去。
具体代码如下:
#include <iostream>
using namespace std;
int main()
{
int n,k;
while(cin>>n&&n!=0) // 输入数,如果为0则退出
{
if(n<10)
cout<<n;
else
cout<<n<<" ";
while(n>9) // 如果不是个位数,再继续解下去
{
k=1;
while(n>9) //计算各个位置上的数乘积。
{
k=k*(n%10);
n/=10;
}
k*=n;
n=k; // k最终为各个位置上数字的积,将k值赋给n
if(n<10) // 格式要求,最后一个数末尾不能有空格
cout<<n;
else
cout<<n<<" ";
}
cout<<endl; //每算完一个实例,就要换行
}
return 0;
}