#include <cstdio>
#include <cstring>
const int MAXN = 10010;
int main()
{
char num[MAXN];
scanf("%s", num);
int len = strlen(num);
int pos = 0; // E's position
while(num[pos++] != 'E')
;
pos -= 1;
if('-' == num[0])
printf("-");
int exp = 0;
for(int i = pos + 2; i < len; ++i)
{
exp = exp * 10 + (num[i] - '0');
}
if(0 == exp)
{
for(int i = 1; i < pos; ++i)
printf("%c", num[i]);
}
if('-' == num[pos + 1])
{
printf("0.");
for(int i = 0; i < exp - 1; ++i)
printf("0");
printf("%c", num[1]);
for(int i = 3; i < pos; ++i)
printf("%c", num[i]);
}
else
{
for(int i = 1; i < pos; ++i)
{
if('.' == num[i])
continue;
printf("%c", num[i]);
if(i == exp + 2 && i != pos - 1)
printf(".");
}
if(exp > pos -3)
{
for(int i = 0; i < exp - (pos - 3); ++i)
printf("0");
}
}
return 0;
}
B1048. 數字加密
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
char a[110], b[110], ans[110];
scanf("%s %s", a, b);
int len1 = strlen(a);
int len2 = strlen(b);
reverse(a, a + len1);
reverse(b, b + len2);
for(int i = 0; i < len1 || i < len2; ++i)
{
int num1 = i < len1 ? a[i] - '0' : 0;
int num2 = i < len2 ? b[i] - '0' : 0;
if(i % 2 == 0)
{
int sum = (num1 + num2) % 13;
if(sum >= 0 && sum <= 9)
ans[i] = sum + '0';
else if(10 == sum)
ans[i] = 'J';
else if(11 == sum)
ans[i] = 'Q';
else
ans[i] = 'K';
}
else
{
int sub = num2 - num1;
ans[i] = (sub < 0 ? sub + 10: sub) + '0';
}
}
reverse(ans, ans + max(len1, len2));
printf("%s",ans);
return 0;
}
A1001. A+B Format
常規解法
#include <cstdio>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
int sum = a + b;
int num[10];
if(sum < 0)
{
printf("-");
sum = -sum;
}
int i = 0;
do
{
num[i++] = sum % 10;
sum /= 10;
}while(sum != 0);
for(i -= 1; i >= 0; --i)
{
printf("%d", num[i]);
if(i % 3 == 0 && i != 0)
printf(",");
}
return 0;
}
利用printf的格式化輸出
#include <cstdio>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
int sum = a + b;
if(sum < 0)
{
printf("-");
sum = -sum;
}
if(sum >= 1000000)
printf("%d,%03d,%03d", sum / 1000000, sum % 1000000 / 1000, sum % 1000);
else if(sum >= 1000)
printf("%d,%03d", sum / 1000, sum % 1000);
else
printf("%d", sum);
return 0;
}
A1005. Spell It Right
常規求解
#include <cstdio>
#include <cstring>
char str[10][10] = {"zero","one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
int main()
{
char num[110];
scanf("%s", num);
int len = strlen(num);
int sum = 0;
for(int i = 0; i < len; ++i)
sum += num[i] - '0';
char digit[10];
sprintf(digit, "%d", sum);
int len1 = strlen(digit);
for(int i = 0; i < len1; ++i)
{
printf("%s", str[digit[i] - '0']);
if(i != len1 - 1)
printf(" ");
}
return 0;
}
利用遞歸求解
#include <cstdio>
#include <cstring>
char str[10][10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
void dfs(int num)
{
if(num / 10 == 0)
{
printf("%s", str[num]);
return;
}
dfs(num / 10);
printf(" ");
printf("%s", str[num % 10]);
}
int main()
{
char num[110];
scanf("%s", num);
int len = strlen(num);
int sum = 0;
for(int i = 0; i < len; ++i)
sum += num[i] - '0';
dfs(sum);
return 0;
}
A1035. Password
#include <cstdio>
#include <cstring>
struct Account
{
char name[15], password[15];
bool isModified;
}account[1100];
void judge(Account& account, int& cnt)
{
int len = strlen(account.password);
for(int i = 0; i < len; ++i)
{
if('1' == account.password[i])
{
account.password[i] = '@';
account.isModified = true;
}
else if('0' == account.password[i])
{
account.password[i] = '%';
account.isModified = true;
}
else if('l' == account.password[i])
{
account.password[i] = 'L';
account.isModified = true;
}
else if('O' == account.password[i])
{
account.password[i] = 'o';
account.isModified = true;
}
}
if(true == account.isModified)
cnt += 1;
}
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; ++i)
{
scanf("%s %s", account[i].name, account[i].password);
account[i].isModified = false;
}
int cnt = 0;
for(int i = 0; i < n; ++i)
judge(account[i], cnt);
if(0 == cnt && 1 == n)
printf("There is 1 account and no account is modified");
else if(0 == cnt)
printf("There are %d accounts and no account is modified", n);
else
{
printf("%d\n", cnt);
for(int i = 0; i < n; ++i)
{
if(account[i].isModified == true)
printf("%s %s\n", account[i].name, account[i].password);
}
}
return 0;
}