九度OJ 1103:二次方程计算器 (解方程)
生活随笔
收集整理的這篇文章主要介紹了
九度OJ 1103:二次方程计算器 (解方程)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
時間限制:1 秒
內(nèi)存限制:32 兆
特殊判題:否
提交:2804
解決:633
題目描述:設計一個二次方程計算器
每個案例是關于x的一個二次方程表達式,為了簡單,每個系數(shù)都是整數(shù)形式。
每個案例輸出兩個實數(shù)(由小到大輸出,中間由空格隔開),保留兩位小數(shù);如果無解,則輸出“No Solution”。
思路:
解方程的題,沒有什么復雜的思路,主要是正確的讀入方程系數(shù),然后根據(jù)各種不同情況求解。
代碼:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <math.h>int main(void) {int n, i;int a, b, c;int flag, side, num;char s[100];while (scanf("%s", s) != EOF){n = strlen(s);i=0;flag = 1;side = 1;num = 0;a = b = c = 0;while (i<n){if (s[i] == '='){side *= -1;i++;continue;}flag = 1;if (s[i] == '+' || s[i] == '-'){if (s[i] == '-')flag = -1;i++;}num = 1;if (isdigit(s[i])){num = atoi(s+i);while (isdigit(s[i]))i++;}if (s[i] == 'x'){if (n-i>=3 && strncmp(s+i, "x^2", 3) == 0){a += num*flag*side;i += 3;}else{b += num*flag*side;i += 1;}}else{c += num*flag*side;i++;}}//printf("%dx^2+(%d)x+(%d)=0\n", a, b, c);int delta = b*b-4*a*c;if (delta < 0)printf("No Solution\n");else{double res1 = (-b-sqrt((double)delta))/2/a;double res2 = (-b+sqrt((double)delta))/2/a;printf("%.2lf %.2lf\n", res1, res2);}}return 0; } /**************************************************************Problem: 1103User: liangrx06Language: CResult: AcceptedTime:0 msMemory:928 kb ****************************************************************/轉(zhuǎn)載于:https://www.cnblogs.com/liangrx06/p/5083929.html
總結(jié)
以上是生活随笔為你收集整理的九度OJ 1103:二次方程计算器 (解方程)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 即将创业的我转发一篇鸡汤文---采访了
- 下一篇: curl命令