結果
| 問題 |
No.81 すべて足すだけの簡単なお仕事です。
|
| コンテスト | |
| ユーザー |
TLwiegehtt
|
| 提出日時 | 2015-07-21 10:19:21 |
| 言語 | C90 (gcc 12.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,708 bytes |
| コンパイル時間 | 237 ms |
| コンパイル使用メモリ | 22,016 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-08 11:31:24 |
| 合計ジャッジ時間 | 1,044 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 12 WA * 18 |
コンパイルメッセージ
main.c: In function ‘main’:
main.c:96:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
96 | scanf("%d", &n);
| ^~~~~~~~~~~~~~~
main.c:99:17: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
99 | scanf("%s", s);
| ^~~~~~~~~~~~~~
ソースコード
#include <stdio.h>
typedef struct{
char symbol;
long long int a;
long long int b;
}DATA;
DATA data[110];
void getNumAndDot(char *s, char *sym, long long int *a, long long int *b){
int noGetFlag=0;
int i,sp=0;
char tc= '+';
long long int ta=0, tb=0;
if(s[sp] == '-'){
tc = '-';
sp++;
}
for(; s[sp] != '\0' && s[sp] != '.'; sp++){
ta= (ta*10) + (int)(s[sp] - '0');
}
sp+=1;
for(i=0;i<10;i++){
int num = (int)(s[sp+i] -'0');
if(s[sp+i] == '\0'){noGetFlag = 1;}
if(noGetFlag == 1){
num = 0;
}
tb = tb*10 + num;
}
*sym = tc;
*a = ta;
*b = tb;
}
void getSum(DATA *a, DATA *b){
DATA c;
c.symbol = '+';
c.a = 0;
c.b = 0;
if( a->symbol == b->symbol ){
c.symbol = a->symbol;
c.b = c.b + a->b + b->b;
if(c.b >= 10000000000){
c.b -= 10000000000;
c.a+=1;
}
c.a = c.a + a->a + b->a;
}else{
if( (a->a) > (b->a) ){
if( a->b < b ->b ){
(a->a) -= 1;
a->b +=
10000000000;
}
}else if( a->a == b->a && a->b > b->b ){
}else{
DATA tmp = *a;
*a = *b;
*b = tmp;
}
c.b = a->b - b->b;
c.a = a->a - b->a;
c.symbol = a->symbol;
}
b->symbol = c.symbol;
b->a = c.a;
b->b = c.b;
}
int main(void){
int i,n;
n=1;
data[0].symbol = '+';
data[0].a = 0;
data[0].b = 0;
scanf("%d", &n);
for(i=1;i<=n;i++){
char s[110];
scanf("%s", s);
getNumAndDot( s, &data[i].symbol, &data[i].a, &data[i].b);
}
for(i=1;i<=n;i++){
getSum(&data[i-1], &data[i]);
}
if(data[n].a == 0 && data[n].b == 0){
data[n].symbol = '+';
}
if(data[n].symbol == '+'){
printf("%lld.%010lld\n", data[n].a, data[n].b);
}else{
printf("-%lld.%010lld\n", data[n].a, data[n].b);
}
return 0;
}
TLwiegehtt