Problem B:K尾相等数

来源:百度知道 编辑:UC知道 时间:2024/09/25 23:15:41
Problem B:K尾相等数
从键盘输入一个自然数K(99999999>K>1),若存在自然数M和N(M>N),使得K的M次方和K的N次方均大于或等于1000,且它们的未尾三位数相等,则称M和N是一对“K尾相等数”。请编程序,输出K尾相等数中M+N最小值。

正确的程序若输入:2
则输出:120
我的代码如下:
#include<iostream>
#include<string>
using namespace std;
#define LEN 1000

int main()
{
int i,k,m,tail[LEN],flag;

while(1)
{
cin>>k;
if(k==1)
exit(0);
i=m=1;
flag=0;

memset(tail,0,sizeof(int)*LEN);

if(k>=LEN)
{
k=k%LEN;
flag=1;
}
while(1)
{
i=i*k;
if(i>=LEN||flag==1)
{
if(tail[i%LEN]==0)
tail[i%LEN]=m;
else
{
tail[i%LEN]+=m;
break;
}
flag=1;
}
if(i>=LEN) //问题1:这行代码什么意思啊
i=i%LEN; //问题2:这行代码什么意思啊
m+

if(i>=LEN) //问题1:这行代码什么意思啊
i=i%LEN; //问题2:这行代码什么意思啊

如果i>=LEN的话那么i=i%LEN,这就相当于一个循环队列,tail数组的长度最长为LEN,如果i超过了LEN长度,就把i=i%LEN,这样i就会从tail数组开始重新赋值,用i找tail中的元素的话就应该这样找tail[i%LEN]