我有这个简单的代码可以反转整数。但是我现在需要为另一个项目将数字以0开头的数字反转。例如,此程序能够将32转换为23,但也可以将3200转换为23。我需要0才能保持领先地位。但是,我已经看到可以执行此操作的位级别的二进制操作,我正在寻找一种方法(如果有的话)而不使用按位操作并使它保持简单。
#include <stdio.h>
int main()
{
int a, mod = 0, reverse = 0;
printf("Enter a number:");
scanf_s("%d", &a);
while(a!=0)
{
mod=a%10;
reverse = reverse * 10 + mod;
a=a/10;
}
printf("%d", reverse);
return 0;
}
答案 0 :(得分:0)
我认为您应该像输入字符串一样处理这个问题。
#include <stdio.h>
#include <string.h>
#define MAX 15
void xor_swap(char *a, char *b) {
if(a != b) {
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
}
int main(int argc, char **argv) {
char buffer[MAX];
size_t length;
printf("Enter a number: ");
fgets(buffer, MAX, stdin);
//fgets also includes the newline chracter so we get rid of that.
length = strlen(buffer);
buffer[length - 1] = '\0';
length--;
for(int i = 0; i < length / 2; i++) {
xor_swap(&buffer[i], &buffer[length - i - 1]);
}
printf("buffer: %s\n", buffer);
}
答案 1 :(得分:0)
读取整数时,用"%n"
记录扫描偏移量。
使用数字的文本宽度控制反转和打印。
int main() {
int a, mod = 0, reverse = 0;
printf("Enter a number:");
int n1, n2;
scanf(" %n%d%n", &n1, &a, &n2);
int width = n2 - n1;
while (width-- > 0) {
mod = a % 10;
reverse = reverse * 10 + mod;
a = a / 10;
}
printf("%0*d", n2-n1, reverse);
return 0;
}
示例
Enter a number:00123
32100
Enter a number:12300
00321
其他未解决的问题。
签署字符'+'
或'-'
。
超出int
范围的输入
超出int
范围的倒数。
非数字输入。
答案 2 :(得分:0)
我想采取略有不同的方法。 当我使用手机接听电话时,我会要求有人为我做代码缩进。
# define SIZE 10
int main ()
{
int num= 3200;
// keep one array of characters to store the reversed digits.
char reversed_digit[SIZE];
int i= 0, temp;
if (num == 0)
reversed_digit[i] = (char) num;
else.
{
while (num > 0)
{
temp= num % 10;
num= num / 10 ;
reversed_digit[i++]= (char) temp;
}
reversed_digit[i]= '\0';
}
printf("The reversed digit is: %s ", reversed_digit);
return 0;
}