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;}
结果
求解释原因并改正 展开
以上程序运行不出结果 正确结果应为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;}
结果
求解释原因并改正 展开
6个回答
展开全部
#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;
}
展开全部
#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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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");
}
#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");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询