一道簡單C語言題,無語了。

2025-04-16 11:00:28 字數 1305 閱讀 1867

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...