C++将一个输入位数不确定的正整数按三位分节格式输出,求改

#include<iostream>usingnamespacestd;voidfenjie(char*p,int&n,int&i){i=1;while(n){if(i%... #include<iostream>using namespace std;void fenjie(char *p,int &n,int &i){ i=1; while(n) { if(i%4!=0) { *p=n%10+'0'; n=n/10; } else *p=','; p++; i++; } do { p--; i--; } while(i>1); }int main(){ int n,j=0,i; char a[81]; cin>>n; fenjie(a,n,i); while(n!=0) { cout<<a[j]; j++; } cout<<endl; return 0;}

以上程序运行不出结果 正确结果应为7,654,321

ps 若main函数为以下形式结果如下
int main(){ int n,j=0,i; char a[81]; cin>>n; fenjie(a,n,i); cout<<a; cout<<endl; return 0;}
结果

求解释原因并改正
展开
 我来答
BlueWanderer
2014-12-16 · TA获得超过9209个赞
知道大有可为答主
回答量:5673
采纳率:83%
帮助的人:1972万
展开全部
#include <iostream>

using namespace std;

// 这里直接用返回值就是了,不需要用引用传
char * fenjie(char *p, int n)
{
    for (int i = 0;;)
    {
        *p++ = n % 10 + '0';
        n = n / 10;

        if (!n)
        {
            break;
        }

        if (++i % 3 == 0)
        {
            *p++ = ',';
        }
    }

    // 因为是倒着写进去的,直接返回结尾的指针就行了。
    return p;
}
int main()
{
    char a[81];

    int n;

    cin >> n;

    char *p = fenjie(a, n);

    // 直接倒序输出
    for (; p != a;)
    {
        cout << *--p;
    }

    cout << endl;

    return 0;
}
xoaxa
2014-12-16 · TA获得超过8607个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3418万
展开全部
#include <iostream>
using namespace std;

void fenjie(char *p,int n) {
int i = 1,t,len,sign;
if(n < 0) { sign = 1, n = -n; }
else sign = 0;
while(n) {
if(i % 4 == 0) p[i++] = ',';
p[i++] = n % 10 + '0';
n = n / 10;
}
if(sign) p[i++] = '-';
p[i] = '\0';
len = i;
for(i = 0; i < len / 2; ++i) {
t = p[i];
p[i] = p[len - 1 - i];
p[len - 1 - i] = t;
}
}

int main() {
int n;
char a[81];
cout << "n = ";
cin >> n;
fenjie(a,n);
cout << a << endl;
return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Brooklebu
2014-12-16 · TA获得超过281个赞
知道小有建树答主
回答量:281
采纳率:0%
帮助的人:298万
展开全部
#include<iostream>
using namespace std;
void fenjie(char *p,int &n,int &i)
{
 i=1;
 while(n)
 {
  if(i%4!=0)
  {
   *p=n%10+'0';
   n=n/10;
  }
  else *p=',';
  p++;
  i++;
 }
}
int main()
{
 int n,j=0,i;
 char a[81];
 cin>>n;
 fenjie(a,n,i);
 j=i-2;
 while(j>=0)
 {
  cout<<a[j];
  j--;
 }
 cout<<endl;
 return 0;
}

这么改,第一个是你死循环了,第二个是你输出顺序错误

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-12-16
展开全部
#include<iostream>
using namespace std;
void fenjie(char *p, int &n, int &i)
{

i = 1;
while (n)
{
if (i % 4 != 0)
{
p[i-1] = n % 10 + '0';
n = n / 10;
}
else
p[i-1] = ',';

i++;
}
p[i - 1] = '\0';
char *m=p;
//cout << p;
char *s = p+i-2,t;
while(m!=s)
{
t = *s;
*s = *m;
*m = t;
++m; s--;
}

}
int main()
{
int n=1234567890, j = 0, i;
char a[81];
//cin >> n;
fenjie(a, n, i);

cout << a;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-12-16
展开全部
你没有对字符数组先置为0,当系统输出你所放进去的字符之后,没有遇到结束符,所以后面有乱码出现,求余是从后面开始操作的,你把拿到的时候放到数组的前面开始往后放,所以输出的不是你想要的
#include <stdio.h>
void func(int num,int &n,int &flag)
{
if(num==0)
{
return;
}
else
{
n++;
func(num/10,n,flag);
n--;
if(n%3==0 && flag)//如果首位输出是‘,’则不输出
{
printf(",");
}
printf("%d",num%10);
flag=1;//已经输出过数字,可以输出','
}
}
void main()
{
int num,n=1,flag=0;
scanf("%d",&num);
func(num,n,flag);
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式