ACMteam_1

这道题内容是这样的:

  将一个数字,各个位数上数相乘,若得到的数字不是个位数,则继续循环下去,直到为个位数为之。(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;
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值