
這是題目要求,下面是參考代碼,實在是看不懂其中的道理,嘗試過debug,對其中的思路還是不懂,
兩個函式的作用都看懂了,可是主函式里面對連續數的輸出不是太懂,尤其是對carry和pos的作用不太懂,
求助大佬解說!
#include <stdio.h>
#include <string.h>
#define exchange(a,b) t=a,a=b,b=t
char t;
void change(char a[])
{
int start=0,end;
int len;
len=strlen(a);
end=len-1;
while(start<end)
{
exchange(a[start],a[end]);
start++;
end--;
}
}
void reprintf(char a[],int len)
{
len--;
while(len >= 0)
printf("%c",a[len--]);
printf("\n");
}
void main()
{
char n[128];
gets(n);
int m,k;
scanf("%d%d",&k,&m);
int s;
change(n);
for(s=0; s<m; s++)
{
int carry = 1;
int pos = 0;
while(n[pos])
{
n[pos]+=carry;
if(n[pos] == '0' + k)
{
n[pos]= '0';
carry = 1;
}
else
{
carry=0;
}
pos++;
}
if(carry)
n[pos++]= '1';
n[pos] =0;
reprintf(n,pos);
}
}
uj5u.com熱心網友回復:
就是把輸入的字串先左右反過來,目的是為了方便它進位變長。然后加一的操作當然是要加在原本的最低位也就是“個位”上,然而現在它在最左端,下標最小那個。
加法逢k進一呀,carry就是進位那個1,往高位上加,現在就是往下一位上加。
pos就沒什么了,你就當他是回圈變數i就好了。
uj5u.com熱心網友回復:
你看不懂大約是因為carry搞了個兼職,每次整體加一加到最低位上,這個1也由它表達了,反正最低位沒有下面進上來的,閑著也是閑著。uj5u.com熱心網友回復:
供參考:#include <stdio.h>
#include <string.h>
#define exchange(a,b) t=a,a=b,b=t
char t;
void change(char a[])
{
int start=0,end;
int len;
len=strlen(a);
end=len-1;
while(start<end)
{
exchange(a[start],a[end]);
start++;
end--;
}
}
void reprintf(char a[],int len)
{
len--;
while(len >= 0)
printf("%c",a[len--]);
printf("\n");
}
void main()
{
char n[128];
gets(n); // 123456789
int m,k; // 10 3
scanf("%d%d",&k,&m);
int s;
change(n); //將輸入字串數n高低位逆序,低位排在前,高位在后 987654321
for(s=0; s<m; s++)//數n之后的m個數,這里m=3
{
int carry = 1;//數n之后的m個數,初始都是在原數上 +1
int pos = 0; //數位游標從0位開始
while(n[pos])//從低位9開始,直到字串陣列n結束 =='\0' 987654321'\0'
{
n[pos]+=carry; //低位 9 先加1
if(n[pos] == '0' + k) //如果到達進制數k值,這里k是int型,n[0]為char型,將k轉為字符型+'0'
{
n[pos]= '0'; //n[pos]歸零
carry = 1; //進位為1
}
else
{
carry=0;//沒有進位,進位為0
}
pos++; //下一位數值 8
}
if(carry) //如果最后進位為1,在最高位置1
n[pos++]= '1';
n[pos] =0; //在n尾部寫入字串結束標志 097654321'\0'
reprintf(n,pos);//將字串n陣列逆序輸出 123456790
}
}
//123456789
//10 3
//987654321
//123456790
//123456791
//123456792
//請按任意鍵繼續. . .
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/280025.html
標籤:C語言
上一篇:C語言雞兔同籠問題
