當前位置:編程學習大全網 - 網站源碼 - 華南農業大學新生c語言競賽題--K尾相等數

華南農業大學新生c語言競賽題--K尾相等數

解:對於壹個數,它的冪是無窮多個的,但是末尾三位數只有1000種。這表明當第壹次重復出現大於等於1000的末尾三位數時,這就是我們要求的M和N了.

源代碼:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define LEN 1000

void main(){

int k,i,tail[LEN],m,flag;

while(1){

scanf("%d",&k); //輸入K

if(k==1) exit(0); //如果K等於1則退出

flag=0; //初始化

i=m=1; //m為當前冪的次數,i等於k的m次冪

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

/* 當K大於1000時我們只要對它的末尾三位數進行冪運算,

* 這樣不影響結果,但減少了冪運算後值的大小

*/

if(k>=LEN) {

k=k%LEN;

flag=1;

}

while(1){

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) i=i%LEN;

m++;

}

printf("%d ",tail[i%LEN]);

}

}

  • 上一篇:vb讀取access數據庫畫實時曲線
  • 下一篇:android 如何把多個布局xml進行組合顯示在壹個界面中?
  • copyright 2024編程學習大全網