大家好,我是編碼初學者,我試圖弄清楚如何輸出所有數字。例如數字158中的數字1、5、8、15、58、158。抱歉英語不好。
我嘗試過一些東西,但它不適用于所有數字,而且我相信必須有更好的方法來編碼它而沒有所有的 while 回圈。
#include <stdio.h>
int main(){
long num = 5025;
int num1=num ,num2= num, num3=num;
while(num1 !=0)
{
int digit = num1 % 10;
num1 = num1/10;
printf("%d\n", digit);
}
while(num2 >10)
{
int digit = num2 % 100;
num2 = num2 / 10;
printf("%.2d\n", digit);
}
while(num3 >100)
{
int digit = num3 % 1000;
num3 = num3 / 10;
printf("%.3d\n", digit);
}
return 0;
}
uj5u.com熱心網友回復:
這是為unsigned int沒有花哨的 printf 格式的任何數字列印它的函式。它還按從最短到最長的順序列印:
void print(unsigned num)
{
char nums[20];
size_t len;
len = sprintf(nums, "%u", num);
for(size_t seql = 1; seql <= len; seql )
{
for(size_t ndig = 0; ndig < len - seql 1; ndig )
{
for(size_t dig = 0; dig < seql; dig )
{
printf("%c", nums[dig ndig]);
}
printf("%c", seql == len ? '\n' : ',');
}
}
}
int main(void)
{
print(15895678);
}
或者沒有字串:
char getNthDigit(unsigned num, size_t digit, size_t len)
{
size_t pos = len - digit;
while(--pos) num /= 10;
return num % 10;
}
size_t getNdigits(unsigned num)
{
size_t count = 0;
while(num)
{
count ;
num /= 10;
}
return count;
}
void print(unsigned num)
{
char nums[20];
size_t len;
len = num ? getNdigits(num) : 1;
for(size_t seql = 1; seql <= len; seql )
{
for(size_t ndig = 0; ndig <= len - seql; ndig )
{
for(size_t dig = 0; dig < seql; dig )
{
printf("%c", '0' getNthDigit(num,dig ndig, len));
}
printf("%c", seql == len ? '\n' : ',');
}
}
}
https://godbolt.org/z/Wa8nKns9E
uj5u.com熱心網友回復:
可以列印到一個字串,然后發布它的各種組合
long num = 158;
char buf[25];
snprintf(buf, sizeof buf, "%ld", num);
for (int first = 0; buf[first]; first ) {
for (int last = first; buf[last]; last ) {
int width = last - first 1;
printf("%.*s\n", width, buf first);
}
}
輸出
1
15
158
5
58
8
根據值的不同,您可能會得到重復。OP 尚未定義在這種情況下該怎么做。
對于純數學方法,我會使用recursion,但我預計此時這超出了 OP 的能力。
uj5u.com熱心網友回復:
#include <stdio.h>
int main(void) {
int num = -158;
char text[12];
sprintf(text, "%d", abs(num));
for(int w=0; w<strlen(text); w)
for(int s=0; s<strlen(text)-w; s)
printf("%.*s\n", w 1, text s);
return 0;
}
來自IDEOne
輸出
Success #stdin #stdout 0s 5632KB
1
5
8
15
58
158
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/353284.html
標籤:C
