CodeForces - 394B 逆推



题目链接:Very Beautiful Number



题目大意:给定两个整数 p  和 x;    找出一个p 位的数  这个数要求最后一位移道首位   编程原来的数的x倍;注意不能出现前导0(就是首位不能为0);



解题思路:  枚举最后一位   for(int i=1; i<10; i++)    ;     c 为上一位的进位;

倒数第二位: A[p-1] = A[p] * x + c;    

倒数第三位:A[p-2] = A[p-1] * x + c; 

最后判定第一位与最后一位是否相等即可;




#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>

using namespace std;

int A[1000005];

int main()
{
    int p, x;
    while(~scanf("%d%d", &p, &x))
    {
        int c = 0;
        int ok = 0;
        for(int i= 1; i<10; i++)
        {
            c = 0;
            A[p-1] = i;
            for(int j = p-2; j>=0; j--)
            {
                A[j] = (A[j+1] * x + c) % 10;
                c = (A[j+1] * x + c) / 10;
            }
            if(A[0] *x + c == A[p-1] && A[0]!=0)
            {
                ok = 1;
                break;
            }
        }
        if(ok) for(int i=0; i<p; i++) printf("%d", A[i]);
        else printf("Impossible");
        printf("\n");

    }
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值