用C语言编写:输入一个不含零的整数,输出这个数是几位数,并输出该数的逆序数。
时间: 2024-06-04 16:11:32 浏览: 107
这是一个技术问题,可以回答。这个问题可以通过以下代码来实现:
#include <stdio.h>
int main() {
int n, count = 0, rev = 0;
printf("请输入一个不含零的整数:\n");
scanf("%d", &n);
while (n != 0) {
int digit = n % 10;
if (digit == 0) {
printf("输入的数含有零,请重新输入!\n");
return 0;
}
count++;
rev = rev * 10 + digit;
n /= 10;
}
printf("这个数是 %d 位数,它的逆序数是 %d\n", count, rev);
return 0;
}
相关问题
用c语言编写程序:输入一个正整数,要求:①求出它是几位数②分别输出每一位数字③按逆序输出各位数字。
在C语言中,你可以通过循环结构和取模运算来实现这个功能。以下是简单的步骤:
1. **求位数**:
首先,读入一个正整数,然后用`log10(n)`(对数函数)来计算位数,因为整数的位数等于其以10为底的对数加一。注意在C语言标准库中,`log10`函数并不直接存在,你需要自己计算或者使用`<math.h>`头文件中的`ilog10`。
```c
#include <stdio.h>
#include <math.h>
int main() {
int num, digit_count = 0;
printf("请输入一个正整数: ");
scanf("%d", &num);
while (num > 0) {
digit_count++;
num /= 10;
}
printf("该数有%d位数。\n", digit_count);
}
```
2. **输出每一位数字**:
可以借助一个循环,每次取出最后一位并打印,再移除这一位。
```c
for (int i = digit_count - 1; i >= 0; i--) {
int last_digit = num % 10;
printf("第%02d位是:%d\n", i + 1, last_digit);
num /= 10;
}
```
3. **逆序输出各位数字**:
同样是一个循环,从低位到高位取出来。
```c
for (int i = 0; i < digit_count; i++) {
int last_digit = num % 10;
printf("倒数第%02d位是:%d\n", i + 1, last_digit);
num /= 10;
}
```
完整代码示例:
```c
#include <stdio.h>
#include <math.h>
int main() {
int num, digit_count = 0;
printf("请输入一个正整数: ");
scanf("%d", &num);
// 求位数
while (num > 0) {
digit_count++;
num /= 10;
}
printf("该数有%d位数。\n", digit_count);
// 输出每位数字
for (int i = digit_count - 1; i >= 0; i--) {
int last_digit = num % 10;
printf("第%02d位是:%d\n", i + 1, last_digit);
num /= 10;
}
// 逆序输出各位数字
for (int i = 0; i < digit_count; i++) {
int last_digit = num % 10;
printf("倒数第%02d位是:%d\n", i + 1, last_digit);
num /= 10;
}
return 0;
}
```
用C语言编写:输入若干个正整数(输入-1 为结束标志),按输入的逆序建立一个单向链表,并输出链表。
好的,以下是用 C 语言编写的程序,实现您的要求:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int val;
struct Node* next;
};
int main() {
struct Node* head = NULL;
// 循环读入并建立链表
int num;
printf("请输入若干个正整数,以-1作为结束标志:\n");
scanf("%d", &num);
while (num != -1) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->val = num;
newNode->next = head;
head = newNode;
scanf("%d", &num);
}
// 遍历链表,输出结果
printf("链表的逆序为:\n");
struct Node* p = head;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
// 释放链表结点的内存
p = head;
while (p != NULL) {
struct Node* tmp = p;
p = p->next;
free(tmp);
}
head = NULL;
return 0;
}
```
上述程序中,我们同样定义了一个结构体 `Node`,表示链表中的一个结点。然后定义了链表的头指针 `head`,用来动态地建立链表。程序通过循环读入若干个正整数,每读入一个数就创建一个新的结点,并将其插入链表的头部,实现逆序建立链表。最后,程序遍历链表,输出链表的逆序。
注意,在程序最后,我们同样需要释放链表结点的内存,避免内存泄漏。这里采用了一个简单的方法,即遍历链表,逐个删除每个结点。需要注意的是,C语言中需要使用 `malloc()` 函数动态分配内存,使用 `free()` 函数释放内存。
阅读全文