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+
从键盘输入一个自然数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]
K尾相等数
1.A B两数的和是12.1,如果A数缩小到他的十分之一,就与B数相等,B数是—( )
若(a^2)*(b-c)+(b^2)(c-a)+(c^2)(a-b)=0,求证:a,b,c三个数中至少有两个数相等
已知互不相等的三数,a b c成等差数列,
A.B两数相差333,把A数最后一位额的数字0去掉,两个数相等,A数原来是几?
A,B两数的差是9,A数的1/6和B数的1/4相等,那么A数,B数各是多少?
a的平方*(b-c)+b的平方*(c-a)+c的平方*(a-b)=0,则a,b,c中至少有两个数相等.
若a^2*(b-c)+b^2*(c-a)+c^2*(a-b)=0,求证:a、b、c三数中至少有两个数相等
若质量相等,则质子数相等
两个数互为相反数,那么他们的n次幂的值()A相等 B不相等 C绝对值相等 D没有任何关系