社区讨论
基于C语言内置函数的解法
P1553数字反转(升级版)参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mkjyvwoo
- 此快照首次捕获于
- 2026/01/19 00:45 2 个月前
- 此快照最后确认于
- 2026/01/22 19:45 2 个月前
逛了一圈题解区发现竟然没看到C语言内置函数版的解法(是时候本蒟蒻卑微地想亮出自己的原始方法了......)
其实C语言内部有一个sscanf函数非常有用,它可以实现例如将“006”的字符数组存进一个长整型变量里面变为“6”,那么就少了循环判断删0的部分。
由于可能数字过大,不开long long听取WA声一片
CPP#include <bits/stdc++.h>
using namespace std;
char head[101];
char tail[101];
char body[101];
void integer(char c[], int n)
{
long long a;
for (int i = 0; i < n; ++i)
{
body[n - 1 - i] = c[i];
}
sscanf(body, "%lld", &a);
printf("%lld", a);
}
void fraction(char c[], int sign, int n)
{
int a, b;
for (int i = 0 ; i < sign; ++i)
{
head[sign - 1 - i] = c[i];
}
for (int j = sign + 1; j < n; ++j)
{
tail[n - 1 - j] = c[j];
}
if (tail[n - sign - 2] == '0')
{
tail[n - sign - 2] = '\0';
}
sscanf(head, "%d", &a);
sscanf(tail, "%d", &b);
printf("%d.%d", a, b);
}
void division(char c[], int sign, int n)
{
int a, b;
for (int i = 0 ; i < sign; ++i)
{
head[sign - 1 - i] = c[i];
}
for (int j = sign + 1; j < n; ++j)
{
tail[n - 1 - j] = c[j];
}
if (tail[n - sign - 2] == '0')
{
tail[n - sign - 2] = '\0';
}
sscanf(head, "%d", &a);
sscanf(tail, "%d", &b);
printf("%d/%d", a, b);
}
void percentage(char c[], int n)
{
long long a;
for (int i = 0; i < n - 1; ++i)
{
body[n - 2 - i] = c[i];
}
sscanf(body, "%lld", &a);
printf("%lld%%", a);
}
int main()
{
char c[101];
scanf("%s", c);
for (int i = 0; i < strlen(c); ++i)
{
if (c[i] == '.')
{
fraction( c, i, strlen(c) );
break;
}
else if (c[i] == '/')
{
division(c, i, strlen(c));
break;
}
else if (c[i] == '%')
{
percentage( c, strlen(c) );
break;
}
else if (i == strlen(c) - 1)
{
integer( c, strlen(c) );
break;
}
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...