Github連結:https://github.com/zora02/object-oriented/tree/master/1001.A%2BB%20Format%20(20)
一、解題
題目
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5SOjF2diBTYsBzMqVza6pmelhjZwYWM3dWVNpmenZDMw8CXldmchx2Lc52YucWbpFmbpNnLxc3dvw1LcpDc0RHaiojIsJye.jpg)
解題過程
這是一道簡單的a+b的問題,可是說簡單也不簡單,題目對輸出的結果有要求,這才是這道題要考我們的地方吧。我一開始的想法就是把a+b的結果變成一個字元串,然後在其中加入逗号。這是我最開始的想法,然後我開始做題了。
我第一個遇到的問題就是怎樣将整數變成字元串(感覺自己好弱T^T):
我去找度娘了,知道了有sprintf這個函數可以實作這一功能。我就去百度百科裡認真的看了一遍有關sprintf這個函數的知識,雖然還是有看不懂的地方,但是至少我又多知道了一種函數,在以後的學習中肯定還會遇到,慢慢的應該就知道該如何很好的使用這個函數了。
springf函數的百度百科
第一次調試遇到的問題
這是我寫完代碼以後拿樣例調試的結果
問題一下子就出來了,我沒有考慮負号的情況,我把負号也當作一個數了。
這是我第一次寫出來的代碼:
#include <stdio.h>
#include <string.h>
int main()
{
int a,b,c,i;
int l=0;
char s[100];
scanf("%d%d",&a,&b);
c=a+b;
sprintf(s,"%d",c);
l=strlen(s);
if(l>4)
{for(i=0;i<l;i++){
printf("%c",s[i]);
if(i==l-1) continue;
if((i+1-l%3)%3==0)
printf(",");
}
}
else if(l<=4) printf("%s",s);
return 0;
}
第二次嘗試 修改代碼
這是我第二次寫出來的代碼:
#include <stdio.h>
#include <string.h>
int main()
{
int a,b,c,i;
int l=0;
char s[100],s1[100];
scanf("%d%d",&a,&b);
c=a+b;
sprintf(s,"%d",c);
l=strlen(s);
if(l>4)
{if(s[0]=='-') {printf("%c",'-');
for(i=1;i<l;i++) {s1[i-1]=s[i];}
for(i=0;i<l;i++){
printf("%c",s1[i]);
if(i==l-1) continue;
if((i+1-l%3)%3==0)
printf(",");
}
}
else for(i=0;i<l;i++){
printf("%c",s[i]);
if(i==l-1) continue;
if((i+1-l%3)%3==0)
printf(",");
}
}
else if(l<=4) printf("%s",s);
return 0;
}
我拿了樣例去調試,過了!超級開心的,就趕緊拿到pat上面送出。沒想到送出了有一個錯誤。
最開始我以為是自己開的數組s、s1沒有初始化的原因,可是改了以後去交還是同樣的錯誤。我感覺蠻奇怪的,也嘗試了其他的例子,都可以過。就去問了學姐。學姐剛開始建議我把對負号的判斷提出來,然後将剩下的數字指派到另一個數組進行判斷,這樣思路會比較清晰。想想我的代碼确實有點冗長。
第三次嘗試 再次修改代碼
這是我第三次寫出來的代碼
#include <stdio.h>
#include <string.h>
int main()
{
int a,b,c,i;
int l=0;
int t=0;
char s[100]={'/0'};
char s1[100]={'/0'};
scanf("%d%d",&a,&b);
c=a+b;
sprintf(s,"%d",c);
l=strlen(s);
if(s[0]=='-') {printf("%c",'-');
for(i=0;i<l-1;i++) {s1[i]=s[i+1];}}
else for(i=0;i<l;i++) {s1[i]=s[i];}
t=strlen(s1);
if(t>4)
for(i=0;i<t;i++){
printf("%c",s1[i]);
if(i==t-1) continue;
if((i+1-t%3)%3==0)
printf(",");
}
else if(t<=4) printf("%s",s1);
return 0;
}
沒想到後來交上還是同一點錯誤!我開始想我是不是有哪個情況沒有考慮,後來在認真看了一遍題目才發現,原來我的判斷條件錯了。當結果是4位數的時候也是要加逗号的,還是太粗心了。原來是這個錯誤。但是我在改代碼過程中還是學到了很多。
成功ac!!!
終極版代碼:
#include <stdio.h>
#include <string.h>
int main()
{
int a,b,c,i;
int l=0;
int t=0;
char s[100]={'/0'};
char s1[100]={'/0'};
scanf("%d%d",&a,&b);
c=a+b;
sprintf(s,"%d",c);
l=strlen(s);
if(s[0]=='-') {printf("%c",'-');
for(i=0;i<l-1;i++) {s1[i]=s[i+1];}}
else for(i=0;i<l;i++) {s1[i]=s[i];}
t=strlen(s1);
if(t>=4)
for(i=0;i<t;i++){
printf("%c",s1[i]);
if(i==t-1) continue;
if((i+1-t%3)%3==0)
printf(",");
}
else if(t<4) printf("%s",s1);
return 0;
}
PAT送出紀錄:
終于給過了!!!
小結
其實感覺這是一道蠻基礎的題目,可是我還是遇到各種問題。哎,感覺自己c真的沒有好好學啊T^T。但是在寫代碼和修改代碼的過程中,我都覺得是一個學習的過程。在寫代碼的時候會可能學到新的解題思路和新的函數,在修改代碼的過程中我可以知道自己解題思路和方法不好的地方,知道了自己不足之處。以後還是應該多多做題,讓自己好好學習。
二、上傳代碼
(其實這部分内容并不在作業的要求範圍内。但是我還是想講一下。因為它花了我更多的時間去解決(´・_・`))
看到作業要求裡說要把代碼送出到Github裡,我最開始以為不就是上傳一下代碼而已,有什麼難的。
But!真的好難啊,首先是全英文的界面,這都是什麼專業術語啊,我看不懂>_<。然後開始了各種百度,由于我的電腦是MacBook,好多百度出來的方法都是在windows下的操作方法,我看群裡面大家讨論的也都是windows下的操作。我也隻能看看,還是繼續我自己的搜尋之路吧。然後在百度了各種教程以後我搞定了ssh key,然後開始打算上傳代碼了。可是我還是不知道改怎麼上傳orz。。。後來在各種搜尋中,我發現了sourcetree這個神器,然後就成功上傳了!這喜悅不比我ac了少啊!
最後我想說其實我還是不知道該怎麼使用Github,我看到班導師說要用指令行什麼的,我什麼都看不懂啊,到最後我也是沒有用。不過我覺得這些東西好像要我們親自去實踐了才會真正的弄明白,光聽别人講并不能學到什麼。
三、總結
通過完成這項作業我學到了不少東西:
- 知道了Github這個神器的網站,雖然我都不怎麼會用(´・_・`)
- 學會了Markdown的一些基本用法,慢慢學會用Markdown碼字。
- 知道了成為一名合格的程式猿需要學習很多,路漫漫啊,我能做的就是一步一步的學好。
- 感受到了實踐出真知真是個偉大的真理啊!!!
Ps.感覺我這篇随筆寫的像在記流水賬一樣,我不知道這樣對于閱讀者來說會不會很糟糕(╥﹏╥),希望能夠見諒。這些都是我想說的話,也許有些廢話,可能還有一些邏輯混亂的話。這是我寫的第一篇随筆,so不足之處希望能夠指出,我将感激不盡( ^ω^ )
轉載于:https://www.cnblogs.com/perhap-s/p/5167058.html