可以用getchar()和putchar()再加速唷
可以用getchar()和putchar()再加速唷
好不容易修掉所有的WA,但是還有三筆TLE,到底是為什麼呢?
//=======================================
#include <stdio.h>
#include <string.h>
#define MAX 1000
char str[MAX]; //輸入的字串
int ans[MAX], big[MAX]; //答案 要加的大數
char check[MAX];
int len;
void init_big () {
int i;
for (i = 0; i < MAX; i++) {
big[i] = 0;
}
}
void init_ans () {
int i;
for (i = 0; i < MAX; i++) {
ans[i] = 0;
}
}
void init () { //這只是我避免麻煩寫的
init_big(); //當初覺得要初始化好多次
init_ans(); //所以就這樣寫 XDD
}
void plus () { //大數加法
int i, j;
j = 0;
for (i = strlen(str) - 1; i >= 0; i--) { //從char 轉 int
big[j] = (int)(str[i] - '0');
j++; //紀錄big[]的長度
}
for (i = 0; i < j; i++) {
ans[i] += big[i];
ans[i+1] += (ans[i] / 10); //避免麻煩,強迫進位
ans[i] %= 10;
}
}
void print () { //檢查用,順便紀錄ans[] 長度
int i;
for (i = (MAX - 1); i >= 0; i--) { //先找到最前面的非 0 位
if (ans[i] != 0) {
break;
}
}
len = i; //紀錄長度
/*
for (; i >= 0; i--) {
printf("%d", ans[i]);
}
puts("");
*/
}
int check_end () {
int i, cor;
if (ans[0] % 2 == 0) {
cor = 1;
}
else {
cor = 2;
}/*
for (i = 0; i < len; i++) {
if ((int)(check[strlen(check) - i - 1] - '0') != ans[i]) {
return 0;
}
}*/
if ((int)(check[strlen(check) - 1] - '0') != ans[0]) {
return 0;
}
return cor;
}
int main () {
init();
while (gets(check) != NULL) {
if (!strcmp(check, "0")) {
print();
break;
}
while (1) {
gets(str);
if (!strcmp(str, "0")) {
print();
break;
}
plus();
init_big();
}
printf("%d\n", check_end());
init();
}
return 0;
}
<引文恕刪>
這題其實根本不是大數
2^1024 是唬你的,阿飄!
//===========以下==code防雷 ==================
#include <stdio.h>
#include <string.h>
char check[500];
char str[500];
int carry;
int main () {
while (1) {
gets(check);
if (!strcmp(check, "0")) {
break;
}
while (1) {
gets(str);
if (!strcmp(str, "0")) {
break;
}
carry += (int)(str[strlen(str)-1] - '0');
carry %= 10;
}
if (carry == (int)(check[strlen(check)-1] - '0')) {
if (carry % 2 == 0) {
puts("1");
}
else {
puts("2");
}
}
else {
puts("0");
}
carry = 0;
}
return 0;
}