1. 程式人生 > >zcmu-1131: 第七章:早知道,是夢一場(思維題)

zcmu-1131: 第七章:早知道,是夢一場(思維題)

 

 

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;
}