题意:给一字符串,表示k进制数,求k满足k进制数%(k-1)==0。
思路:(a+b)%c等同于(a%c+b%c)%c、(a*b)%c等同于((a%c)*(b%c))%c,那么对于一个进制数abcde等同于e+d*k^1+c*k^2+b*k^3+a*k^4,那么abcde%(k-1)则等同于(a+b+c+d+e)%(k-1)-------//(k%(k-1)==1),思路清晰了,AC吧~
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1104
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <string> 5 #include <algorithm> 6 #include <iostream> 7 using namespace std; 8 9 string num; 10 11 int main(){ 12 13 // freopen("data.in","r",stdin); 14 // freopen("data.out","w",stdout); 15 16 int i; 17 while(cin>>num){ 18 int MAX=0,sum=0; 19 for(i=0;i<num.length();i++){ 20 if(num[i]>='0'&&num[i]<='9'){ 21 if(num[i]-'0'>MAX) MAX=num[i]-'0'; 22 sum+=num[i]-'0'; 23 } 24 else{ 25 if(num[i]-'A'+10>MAX) MAX=num[i]-'A'+10; 26 sum+=num[i]-'A'+10; 27 } 28 } 29 if(!MAX) MAX++; 30 for(i=MAX;i<=36;i++){ 31 if(sum%i==0){ 32 cout<<i+1<<endl; 33 break; 34 } 35 } 36 if(i>36) puts("No solution."); 37 } 38 return 0; 39 }