版权声明:本人大三在读,有错误烦请指正,共同进步- ( ゜- ゜)つロ 乾杯~点赞请按右上角,转载请标明出处: https://blog.csdn.net/hzyhfxt/article/details/84147578
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 118 Solved: 44
[Submit][Status][Web Board]Description
毕业,这个伤感的季节,总是伴着不舍。自闭而又敏感、自尊的陈孝正却在毕业的时候又选择了出国,放弃了郑微。此刻的郑薇,感觉像是梦一场回到了原点。
郑薇就像是这个数:102564,渡过了四年的大学时光,102564*4=410256,只是自己右移了一位,没有其他的不同。暂且我们把这样一类数叫做郑薇数,请你研究一下,如果给定两个数n和k,怎样找到一个的最小的郑薇数,使他的最右位恰好是数字k,且乘以n以后的数字等于自身数字循环右移一位。
Input
第一行是数字t,表示接下来有几组数据,每组数据单独成行,包括两个整数n和k(1<=n<=9&&1<=k<=9)。
Output
每组数据分别输出一个整数,且要单独成行,如果最小的郑薇数(且她的最右位恰好是数字k)存在,则输出他,否则输出0
Sample Input
1 4 5
Sample Output
128205
像我这种思维混乱型选手想了整整两天...还是学习了同学的代码之后再整明白的。。。
k*n 算出的第一位个位的结果,就是上面乘数的十位上的数字,一个个推上去就好了(我推了很久)
示意图如下:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
int main()
{
int t,n,k;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
int i = 1,jw = 0;
int a[10000] = {0};
a[0] = k;
while(1)
{
a[i] = a[i-1] * n + jw;
//printf("a[%d] = %d ",i,a[i]);
if(a[i] == k)
break;
jw = a[i] / 10;
a[i] %= 10;
i++;
}
if(a[i-1] == 0) printf("0");
else for(int j = i-1;j >= 0;j--) printf("%d",a[j]);
puts("");
}
return 0;
}