【高精度】乘积根

问题 H: 【高精度】乘积根

时间限制: 1 Sec  内存限制: 64 MB
提交: 11  解决: 4
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述
一个整数的数字乘积根是这样得到的:将此整数中的非零数字相乘,得到的结果再重复上述运算,直到只有一位数为止,此一位数即为原整数的数字乘积根。例如:整数99,99--9×9=81--8×1=8,8即为99的乘积根。

 

输入
一个n位的整数(n≤255)。

 

输出
有若干行,每行显示每次数字相乘之后的结果,最后一行只有一个一位数,即n的乘积根。

 

样例输入
99

 

样例输出
81
8

注意!!!!是非零数字相乘!!
 1 #include <iostream>
 2 #include<string>
 3 #include<cstring>
 4 using namespace std;
 5 int n,a[100005],b[100005],c[100005];
 6 string fun_multi(string s,char t)
 7 {
 8     string ans;
 9     if(s=="0"||t=='0')
10     {
11         return "0";
12     }
13     memset(c,0,sizeof(c));
14     int len1=s.size(),w=0,n=t-'0';
15     for(int i=len1-1;i>=0;i--)  a[len1-i-1]=s[i]-'0';
16     for(int i=0;i<len1;i++)
17     {
18         c[i]=a[i]*n+w;
19         w=c[i]/10;
20         c[i]%=10;
21     }
22     if(w)   c[len1]=w,len1++;
23 //    while(!c[len1]) len1--;
24     for(int i=len1-1;i>=0;i--)
25         ans+=c[i]+'0';
26     return ans;
27 }
28 string fun(string s)
29 {
30     string ans="1",t;
31     int len=s.size();
32     for(int i=0;i<len;i++)
33     {
34         if(s[i]=='0')   continue;
35         ans=fun_multi(ans,s[i]);
36 //        if(ans=="0")
37 //            break;
38 //        cout<<ans<<endl;
39     }
40     return ans;
41 }
42 int main()
43 {
44     string s;
45     cin>>s;
46 
47 //    cout<<s<<endl;
48     int len=s.size();
49     if(len==1) {
50         cout<<s<<endl;
51         return 0;
52     }
53     while(len!=1)
54     {
55         s=fun(s);
56         cout<<s<<endl;
57         len=s.size();
58     }
59 //    cout<<s<<endl;
60     return 0;
61 }
View Code

 

转载于:https://www.cnblogs.com/scott527407973/p/9323102.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值