题目:https://www.patest.cn/contests/gplt/L1-046
模拟除法来解决问题,解决数据过大的问题
#include <iostream> #include <cmath> using namespace std; int main(){ int n; cin>>n; int i = 0; int sum = 1; int res[10000]; //存储最后的商,开这么大的数组,防止有的过大,造成溢出 while(true){ // 模拟除法 if(sum < n){ sum = sum * 10 + 1; res[i] = 0; } else { res[i] = sum / n; if(sum%n == 0) break; sum = (sum % n)*10 + 1; } i++; } int flag = 0; // 找到第一个不为零的数字 for(int j = 0;j<=i;j++){ if(res[j]!=0){ flag = j; break; } } for(int j = flag;j<=i;j++){ cout<<res[j]; } cout<<" "<<i+1; //i+1表示光棍的位数 return 0; }