目录
1.统计数字位数
使用do while语句,当n=0时,数字位数为1。
int count(long long num) {//计算位数
int n = 0;
long long tmp = num;
do {
n++;
tmp /= 10;
} while (tmp != 0);
return n;
}
int count(long long num) {//计算位数
int n = 0;
if (num == 0) {
n++;
}
else {
while (num != 0) {
n++;
num /= 10;
}
}
return n;
}
2.逆序输出数字
取末尾数字:数字对10取余(num%10)。
去掉末尾数字:将数字除以10(num/=10)。
编程题:
给定一个整数可能为正,0负数,从右往左输出这个数据的每一位。
例如1234567输出7 6 5 4 3 2 1
例如-12345678输出-8 7 6 5 4 3 2 1
int* Reserve(long long num) {
int n = count(num);
int* arr = (int*)malloc(n * sizeof(int));
assert(arr != NULL);
long long tmp = num;
int i = 0;
if (num < 0)
num *= -1;
do {
arr[i] = num % 10;
num /= 10;
i++;
} while (num != 0);
return arr;
}
void print(int* a, int len) {//输出数组
for (int i = 0; i < len; i++) {
printf("%d ", a[i]);
}
}
int main() {
long long num;
printf("输入一个整数:\n");
scanf("%lld", &num);
int* arr = Reserve(num);
int n = count(num);
if (num >=0) {
print(arr,n);
}
else {
printf("-");
print(arr, n);
}
return 0;
}
3.顺序输出数字
取首位数字:数字除以10^(数字位数-1)。
去掉首位数字:数字对10^(数字位数-1)取余。
编程题:
给定一个整数可能为正,0,负数,顺序输出这个数字的每一位
例如1234567输出1 2 3 4 5 6 7
例如-123456789输出-1 2 3 4 5 6 7 8 9
void seque(long long num) {
int n = count(num);
int power = pow(10, n - 1);
if (num < 0)
num *= -1;
do {
printf("%d ", num / power);
num %= power;
power /= 10;
} while (num != 0);
}
int main() {
long long n;
scanf("%lld", &n);
int num = count(n);
if(n<0)
printf("-");
seque(n);
return 0;
}