2793 - 求数字乘积根
一个正整数的数字的乘积的定义是:这个整数中非零数字的乘积。例如整数999的数字乘积为9×9×9,即729;729的数字乘积为7×2×9,即126;126的数字乘积为1×2×6,即12;12的数字乘积为1×2,即2。
一个正整数的数字乘积根是这样得到的:反复取该整数的数字乘积,直到得到一个数字为止。999的数字乘积根就是2。
Input
一行:一个正整数n,10<n<1000000000
Output
一行:数字乘积根
Examples
Input
999
Output
2
Solution C++
#include<bits/stdc++.h> using namespace std; string s1,s2,s3; int a[1005]; void xx(string s,int ss) { memset(a,0,sizeof(a)); int si=s.size(); for(int i=0;i<si/2;i++) swap(s[i],s[si-1-i]); for(int i=0;i<si;i++) { a[i]+=(s[i]-'0')*ss; a[i+1]+=a[i]/10; a[i]=a[i]%10; } int q=0; if(a[si]!=0) si++; string s3=""; swap(s3,s2); for(int i=si-1;i>=q;i--) s2+=char(a[i]+'0'); } int main() { cin>>s1; if(s1.size()==1)cout<<s1; else for(;s1.size()!=1;) { s2+=s1[0]; for(int i=1;i<s1.size();i++)if(s1[i]!='0')xx(s2,s1[i]-'0'); swap(s1,s2); string fc=""; swap(fc,s2); } cout<<s1; return 0; }