用c语言编写的数字反转程序
我正在寻找用c语言编写的数字反转程序,c,reverse,C,Reverse,我正在寻找C程序,以反转如下所示的数字: 如果我进入: 123456 那么结果将是: 654321 请帮助我。使用%10获取最后一位数字。输出它。将数字除以10,得到除最后一位以外的所有数字。使用%10获取该数字的最后一位。依此类推,直到数字变为0。使用%10获取最后一位数字。输出它。将数字除以10,得到除最后一位以外的所有数字。使用%10获取该数字的最后一位。以此类推,直到数字变为0。这是一个解决这个复杂问题的简单方法: #include <stdio.h> int main()
C
程序,以反转如下所示的数字:
如果我进入:
123456
那么结果将是:
654321
请帮助我。使用
%10
获取最后一位数字。输出它。将数字除以10,得到除最后一位以外的所有数字。使用%10
获取该数字的最后一位。依此类推,直到数字变为0。使用%10
获取最后一位数字。输出它。将数字除以10,得到除最后一位以外的所有数字。使用%10
获取该数字的最后一位。以此类推,直到数字变为0。这是一个解决这个复杂问题的简单方法:
#include <stdio.h>
int main()
{
int ch;
ch = getchar();
if (ch != '\n') {
main();
printf("%c", ch);
}
}
#包括
int main()
{
int-ch;
ch=getchar();
如果(ch!='\n'){
main();
printf(“%c”,ch);
}
}
输出换行符的新版本:
#include <stdio.h>
#include <stdlib.h>
static void newline(void)
{
printf("\n");
}
int main()
{
int ch;
ch = getchar();
if (ch != '\n') {
main();
printf("%c", ch);
} else {
atexit(newline);
}
}
#包括
#包括
静态void换行符(void)
{
printf(“\n”);
}
int main()
{
int-ch;
ch=getchar();
如果(ch!='\n'){
main();
printf(“%c”,ch);
}否则{
atexit(新线);
}
}
这是一个解决这个复杂问题的简单方法:
#include <stdio.h>
int main()
{
int ch;
ch = getchar();
if (ch != '\n') {
main();
printf("%c", ch);
}
}
#包括
int main()
{
int-ch;
ch=getchar();
如果(ch!='\n'){
main();
printf(“%c”,ch);
}
}
输出换行符的新版本:
#include <stdio.h>
#include <stdlib.h>
static void newline(void)
{
printf("\n");
}
int main()
{
int ch;
ch = getchar();
if (ch != '\n') {
main();
printf("%c", ch);
} else {
atexit(newline);
}
}
#包括
#包括
静态void换行符(void)
{
printf(“\n”);
}
int main()
{
int-ch;
ch=getchar();
如果(ch!='\n'){
main();
printf(“%c”,ch);
}否则{
atexit(新线);
}
}
用scanf(“%s”,a)
读取字符数组a
中的数字,或者更好的方法是,用strlen(a)-1
到0
用scanf(“%s”,a)
读取字符数组a
中的数字,或者更好的方法是,通过输出从strlen(A)-1开始的每个字符到0
strev函数反转字符串,使用并输出字符数组。如果性能不是问题,那么举例来说,您可以先执行itoa,然后执行STREV,然后执行atoi。
但是,即使没有strev,任务也非常简单。strev函数会反转字符串。如果性能不是问题,那么举例来说,您可以先执行itoa,然后执行STREV,然后执行atoi。
但是即使没有strev,任务也很简单。如果你的教授在给你评分,那么试着在另一个问题中解决这个问题:
int FastReverse(int num) {
int res = 0;
int q = (int)((214748365L * num) >> 31);
int rm = num - 10 * q;
num = q;
if (rm == 0) return -1;
res = res * 10 + rm;
while (num > 0) {
q = (int)((214748365L * num) >> 31);
rm = num - 10 * q;
num = q;
res = res * 10 + rm;
}
return res;
}
优化®
如果你的教授正在给你的表现评分,那么试着用另一个问题来回答这个问题:
int FastReverse(int num) {
int res = 0;
int q = (int)((214748365L * num) >> 31);
int rm = num - 10 * q;
num = q;
if (rm == 0) return -1;
res = res * 10 + rm;
while (num > 0) {
q = (int)((214748365L * num) >> 31);
rm = num - 10 * q;
num = q;
res = res * 10 + rm;
}
return res;
}
优化®
当它是绝对的时候,肯定要在这纳秒内完成。这里还有另一种可能性。它是非递归的,可能代码更少。代码注释中有一个示例来解释逻辑
/*
Example: input = 12345
The following table shows the value of input and x
at the end of iteration i (not in code) of while-loop.
----------------------
i | input | x
----------------------
0 12345 0
1 1234 5
2 123 54
3 12 543
4 1 5432
5 0 54321
----------------------
*/
uint32_t
reverseIntegerDigits( uint32_t input )
{
uint32_t x = 0;
while( input )
{
x = 10 * x + ( input % 10 );
input = input / 10;
}
return x;
}
这是另一种可能性。它是非递归的,可能代码更少。代码注释中有一个示例来解释逻辑
/*
Example: input = 12345
The following table shows the value of input and x
at the end of iteration i (not in code) of while-loop.
----------------------
i | input | x
----------------------
0 12345 0
1 1234 5
2 123 54
3 12 543
4 1 5432
5 0 54321
----------------------
*/
uint32_t
reverseIntegerDigits( uint32_t input )
{
uint32_t x = 0;
while( input )
{
x = 10 * x + ( input % 10 );
input = input / 10;
}
return x;
}
看起来像一根很旧的线。但我在这里引用了解决方案,在测试了本网站上提供的不同解决方案后,我不得不编写自己的解决方案。我意识到,如果数字以零结尾,将数字视为int将不会产生必要的数字反转。所以我决定把这个数字当作一个字符串,然后把数字倒过来。这样,我就可以从字符串的角度得到数字的精确倒数,而不是在数字的开头舍弃零的数学倒数
#include <stdio.h>
#include <string.h>
main()
{
char num[20];
int x=0,slen;
printf("Enter the number you want to reverse :");
scanf("%s",num);
slen=strlen(num);
char *pointertoarray = &num[slen];
for (x=slen;x>=0; x--){ printf("%c",*pointertoarray); pointertoarray--; }
printf("\n");
}
#包括
#包括
main()
{
字符数[20];
int x=0,slen;
printf(“输入要反转的号码:”);
scanf(“%s”,num);
slen=strlen(num);
char*pointertoarray=&num[slen];
对于(x=slen;x>=0;x--){printf(“%c”,*pointertoarray);pointertoarray--;}
printf(“\n”);
}
看起来像一条非常古老的线。但我在这里引用了解决方案,在测试了本网站上提供的不同解决方案后,我不得不编写自己的解决方案。我意识到,如果数字以零结尾,将数字视为int将不会产生必要的数字反转。所以我决定把这个数字当作一个字符串,然后把数字倒过来。这样,我就可以从字符串的角度得到数字的精确倒数,而不是在数字的开头舍弃零的数学倒数
#include <stdio.h>
#include <string.h>
main()
{
char num[20];
int x=0,slen;
printf("Enter the number you want to reverse :");
scanf("%s",num);
slen=strlen(num);
char *pointertoarray = &num[slen];
for (x=slen;x>=0; x--){ printf("%c",*pointertoarray); pointertoarray--; }
printf("\n");
}
#包括
#包括
main()
{
字符数[20];
int x=0,slen;
printf(“输入要反转的号码:”);
scanf(“%s”,num);
slen=strlen(num);
char*pointertoarray=&num[slen];
对于(x=slen;x>=0;x--){printf(“%c”,*pointertoarray);pointertoarray--;}
printf(“\n”);
}
计算数字中的位数并存储在计数变量中
提取变量中的单个数字
使用电源功能
while(count>=1)
{
var = num % 10;
sum = sum + var * pow(10, count - 1);
num =num / 10;
count--;
}
计算数字中的位数并存储在计数变量中
提取变量中的单个数字
使用电源功能
while(count>=1)
{
var = num % 10;
sum = sum + var * pow(10, count - 1);
num =num / 10;
count--;
}
请学习如何明智地回答问题。看起来像一个著名的“C”面试问题:-)你现在正在面试吗?那么我们最好赶快解决你的问题。请学习如何聪明地回答问题。看起来像一个著名的“C”面试问题:-)你现在正在面试吗?那我们最好赶快解决你的问题。如果我没弄错的话,strev不是一个标准函数,可能不是所有的编译器都可以使用。是的,当然可以。在这种情况下,strrev自己的实现会有所帮助。如果我没有弄错的话,strrev不是一个标准函数,可能不会在所有编译器上都可用。是的,当然。在这种情况下,strev自己的实现会有所帮助。我想我被否决了,因为我没有打印尾随的换行符?这不是一项要求。;-)但是为什么不让它同时打印新行呢?如果你这样做,我会+1你:P。只要一张便条:打电话<