编程之美:找符合条件的整数

问题描述:

任给正整数N,求最小正整数M,使得N*M的十进制表示形式里只含1和0

#include <iostream>
#include <vector>
using namespace std;

#define MAX 1007

vector<vector<int>> BigInt(MAX);
int main(){  
	int N=99;
	for(int i=0;i<N;i++)
		BigInt[i].clear();
	BigInt[1].push_back(0);

	for(int i=1,j=10%N;;i++,j = (j*10)%N){
		int NoUpdate=0;
		bool flag=false;
		if(BigInt[j].size()==0){
			BigInt[j].clear();
			BigInt[j].push_back(i);
		}
		for(int k=1;k<N;k++){
			if(BigInt[k].size()>0
				&&(i>BigInt[k][BigInt[k].size()-1])
				&&(BigInt[(k+j)%N].size() == 0)){
				flag=true;
				BigInt[(k+j)%N]=BigInt[k];
				BigInt[(k+j)%N].push_back(i);
			}
		}
		if(flag==false)
			NoUpdate++;

		//如果经过一个循环节都没对BigInt进行更新,就是无解
		//或者BigInt[0]!=NULL,已经找到解
		if(NoUpdate == N||BigInt[0].size()>0)
			break;
	}
	if(BigInt[0].size()==0){
		
	}
	else{
		cout<<"N*M=";
		for(int i=BigInt[0][BigInt[0].size()-1],j=BigInt[0].size()-1;i>=0;i--){
			if(j>=0&&i==BigInt[0][j]){
				cout<<"1";
				j--;
			}
			else{
				cout<<"0";
			}
				
		}
	}
    return 0;  
}  
    原文作者:_王川
    原文地址: https://blog.csdn.net/starcuan/article/details/21256671
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞