1樓:匿名使用者
錯誤的原因如其他一樣,因為y的數值太大,不處理的話計算機表示不了,所以得換個方法做。
具體思想是:逐次累加和累乘計算x和y的值,當得到的x或y的值大於400009時就進行求餘運算。
舉例說明:當某時刻計算得到的x值為: 400010時,400010%400009 = 1,將求餘得到的值1繼續加入到後續的計算中。
簡要說明如下(400009a + b)%400009 = a + b%400009;
400009a * b) %400009 = a*b%400009;
所以編寫程式如下:
#include
#include
int main()
int n,m,x,y,b;
while(1){
printf("輸入n和m:")
scanf("%d%d",&n,&m);
x = 0;
for(int i=1; i<=n; i++)
x +=鄭明譁365;
if(x > 400009)
x = x%400009;
y = 1;
for(int j=1; j<=m*365; j++)
喊行槐扒 y *=2;
if( y > 400009)
y = y%400009;
if(y-x <0)
y +=400009;
printf("%d",y-x);
return 0;
2樓:風林火陰山雷
您好!很高興為您解答。
主要問題在於2^365這個數實在太大了……手漏。
拿編譯器vc++舉例,int型別為4位元組32位,unsigned int最多才能表示0~2^32-1的數。m要是整數的話,y早就已經公升或超限了(簡直人類難以企及的數量級啊),根本不可能得出正確結果。
建議lz放棄這種題目,沒什麼意義,程式設計還是要把吵薯伍重點放在演算法上。望~
3樓:網友
這明顯是因為你y的問題陪橡,因虛悄為y很大,而int只有4個位元組,因此y很有可能溢位了。
#include 《蘆譽旁》
int main()
int n, m, b;
long unsigned int x, y;
scanf("%d %d", n, &m);
x = 365 * n;
y = pow(2, (365 * m));
b = y - x) %400009;
printf("%d", b);
return 0;
一道簡單的c語言題,一道簡單的C語言題
這個程式的目的是將你輸入的字串中的a,a互換大小寫.但程式寫錯了.首先scanf遇到空格就停止了,所以s只接收到了ahama.其次,還是同樣的問題,scanf是遇到空格停止的,所以s中並沒有 n 因此while迴圈並不是如你想象到的ahama就結束了,而是會繼續下去,導致s i 訪問無效資料.再次,...
一道簡單的c語言,一道c語言程式設計?
m是計算執行的次數,二重迴圈的迴圈次數就是外迴圈次數 內迴圈次數。外迴圈 1,5,9,13 內迴圈 3,7,11,15,19 4 5 20次,所以m 20 功能是輸出兩層巢狀迴圈執行的次數。用外迴圈執行次數 內迴圈執行次數。外迴圈變數的值變化 共4次。內迴圈變數的值變化 共5次。所以m的值為20 4...
一道C語言程式設計題,一道C語言程式設計題
源 只要150行的程式就能用於 抗震救災 一道c語言程式設計題 15 在vc6下除錯通過。include stdio.h main printf 共有 版 d組解 權 n count 一道c語言程式設計題。5 include int s 100 100 定義陣列,第i行存的是第i個學生的成績 int...