d873 - 00465 - Overflow
題目描述
題目要求讀取兩個數字和一個運算符號(+ 或 *),並檢查輸入的數字或運算結果是否超過 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;
}