5.29每日一题题解

L1-046 整除光棍

涉及知识点:

  • 思维、数学

solution:

  • 这道题如果你做的话你会发现数据很大,如果直接暴力的话,会炸掉。

  • 所以一般这种情况下,都是有技巧的。 这道题你可以得到一个除数就输出一个除数,直到最后余数等于0时结束。

  • 比如x=13,令m=1,a作为每次的结果除数,因为当m=1和11除以13除数都是0

  • (可以不要,辣么m就从111开始,则a=111/13=8,然后输出a,此时m也要变)

  • m = 111%13=7;然后让m=7*10+1=71,则a=71/13=5,然后输出a,m=71%13=6

  • (然后让m=6*10+1=61,则a=61/13=4,然后输出a,m=61%13=9;然后让m=9*10+1=91)

  • (则a=91/13=7,然后m=91\%13=0,则跳出循环。)

  • 其实这和我们在草稿纸上计算两个数相除 过程是一样的,只不过在计算机中被分解成了一步一步的运算,直到余数为0。

  • (这是我从网上看到的一篇比较好而且较容易理解的思路,所以放到了这里。自己最好在草稿纸纸上演算一下除法过程)

std:

#include <iostream>

using namespace std;

int main()
{
    int x,s = 0,n = 0;
    cin >> x;
    while(x > s){
        s = s * 10 + 1;
        n ++;
    }
    while(1){
        cout << s / x;
        s = s % x;
        if(!s)break;
        s = s * 10 + 1;
        n ++;
    }
    cout << " " << n << endl;
    return 0;
}

原文地址:https://www.cnblogs.com/QFNU-ACM/p/12985473.html