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

本文介绍了一个算法问题,即给定一个正整数N,如何寻找最小的正整数M,使得N*M的十进制表示仅包含1和0。通过使用循环和条件判断,该程序有效地解决了这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

任给正整数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;  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值