# Number# Input/Output# Conditional Statements

d873 - 00465 - Overflow

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取兩個數字和一個運算符號(+ 或 *),並檢查輸入的數字或運算結果是否超過 32 位有號整數的最大值 (2147483647)。如果超過,則輸出相應的錯誤訊息。

解題思路

程式首先讀取兩個字串形式的數字和一個運算符號。然後,使用 atof 函數將字串轉換為雙精度浮點數。接著,程式檢查兩個輸入數字是否大於 2147483647。如果運算符號是 '+',則檢查兩個數字的和是否大於 2147483647。如果運算符號是 '*',則檢查兩個數字的積是否大於 2147483647。根據檢查結果,輸出相應的錯誤訊息。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
    double a,b;
    char x[500],y[500],op;
    while(scanf("%s %c %s",&x,&op,&y)==3){
        a = atof(x);
        b = atof(y);
        printf("%s %c %s\n",x,op,y);
        if(a>2147483647)printf("first number too big\n");
        if(b>2147483647)printf("second number too big\n");
        if(op=='+'&&a+b>2147483647)printf("result too big\n");
        if(op=='*'&&a*b>2147483647)printf("result too big\n");
    }
return 0;
}

Discussion