我在 linux 上用 C 编码,我需要反转一个数字。(例如:12345 将变成 54321),我打算使用 itoa 将其转换为字符串,然后将其反转,因为字符串操作可能更容易,但事实证明 itoa 是非标准的并且不包括在内在 gcc 中。有没有办法对十进制数进行二进制旋转风格的事情,如果没有,我应该采取什么方法?
问问题
9877 次
8 回答
14
int n;
scanf("%d",&n);
int rev=0,rem;
while(n>0)
{
rem=n%10; //take out the remainder .. so it becomes 5 for 12345
rev=rev*10+rem; //multiply the current number by 10 and add this remainder.
n=n/10; //divide the number. So it becomes 1234.
}
printf("%d",rev);
于 2013-05-08T18:02:03.910 回答
2
#include<stdio.h>
main()
{
int rev=0,n;
scanf("%d",&n);
while(n)
{
rev=10*rev+n%10;
n/=10;
}
printf("result=%d",rev);
}
于 2014-05-07T23:04:42.330 回答
1
做到这一点没有字符串。
fkt()
{
int i = 12345;
int n = 0;
int x;
char nr[10];
char *p = &nr[0];
while(i != 0)
{
x = i % 10;
i = i/10;
n = n * 10 + x;
*p = x+'0';
p++;
}
*p = 0;
printf("%d %s\n", n, nr);
return 0;
}
于 2013-05-08T18:36:05.053 回答
0
iota()
不是标准的 C 函数,但也snprintf()
可以达到目的。
/* assume decimal conversion */
const char * my_itoa (int input, char *buffer, size_t buffersz) {
if (snprintf(buffer, sz, "%d", input) < sz) return buffer;
return 0;
}
由于输入不能为负,您可以使用无符号类型:
unsigned long long irev (unsigned input) {
unsigned long long output = 0;
while (input) {
output = 10 * output + input % 10;
input /= 10;
}
return output;
}
反转输入可能会导致值不再适合输入类型,因此返回结果会尝试使用更宽的类型。如果unsigned
和unsigned long long
具有相同的宽度,这可能仍然会失败。对于这种情况,使用字符串来表示反转值可能是最简单的。或者,如果唯一的目标是打印数字,您可以使用循环以相反的顺序打印数字。
void print_irev (unsigned input) {
if (input) {
do {
putchar('0' + input % 10);
input /= 10;
} while (input);
} else {
putchar('0');
}
putchar('\n');
}
于 2013-05-08T18:18:58.180 回答
0
你可以使用堆栈来做到这一点,
struct node
{
char character;
struct node *next;
};
struct node *list_head,*neos;
main()
{
list_head=NULL;
char str[14];
int number,i;
scanf("%d",&number);
sprintf(str,"%d",number); //here i convert number to string
for(i=0;i<strlen(str);i++) //until the end of the string
{
add_to_stack(str[i]); //i take every character and put it in the stack
}
print_the_number();
}
注意这里,在堆栈中最后添加的项目,它首先取出,这就是它的工作原理..
void add_to_stack(char charac)
{
neos=(struct node*)malloc(sizeof(struct node));
neos->character=charac;
neos->next=list_head;
list_head=neos;
}
void print_the_number()
{
struct node *ptr;
ptr=list_head;
while(ptr!=NULL)
{
printf("%c",ptr->character);
ptr=ptr->next;
}
}
于 2013-05-08T21:15:21.913 回答
0
如果你真的想使用字符串,你可以使用 sprintf 来完成 itoa 的工作。
int k = 12345;
char str[40];
sprintf(str,"%d",k);
然后反转字符串并使用 atoi 或 sscanf 将其转换回 int。
于 2013-05-08T18:04:33.890 回答
0
#include<iostream>
using namespace std;
int main()
{
int dig,n,rev=0;`
cout<<"enter number";
cin>>n;
while(n!=0)
{
dig=n%10;
rev=rev*10+dig;
n=n/10; }
if(n==0){
cout<<"palindrome of zeros ";
}
if(rev==1)
{
cout<<"reverse of 10 is 01";
}
//since exception occurs when user inputs 10 or 0s
else
{
cout<<"reverse of the number is ";
cout<<rev;
}
getch();
}
于 2021-02-22T15:51:53.630 回答
0
他们有两种方法
方法一:
int n;
cin>>n;
int rev=0,rem;
while(n>0)
{
rem=n%10;
rev=rev*10+rem;
n=n/10;
}
cout<<rev;
方法二:
cin>>n; // size of array
int a[n+1]={0};
for(i=1;i<=n;i++)
cin>>a[i];
for(i=n;i>0;i--)
cout<<a[i];
于 2021-06-14T15:06:30.820 回答