第一题的:
#include <malloc.h>
typedef unsigned long UL;
UL *Lcm;
UL lcm(UL m,UL n)
{
UL t=n,m1=m,n1=n;
if(m>n)
{
t=m;
m=n;
n=t;
}
while(n%m!=0)
{
t=n;
n=m;
m=t%m;
}
return m1*n1/m;
}
void l(UL *p,UL t)
{
UL n=p[0];
UL i;
for(i=1;i<=n;i++)
Lcm[t]=lcm(Lcm[t],p[i]);
printf(\"%ld\n\",Lcm[t]);
}
int main()
{
UL i,j,m,n;
char g;
UL **num;
printf(\"**********INPUT***********\n\");
scanf(\"%ld\",&n);
num=(UL**)malloc(sizeof(UL*)*n);
Lcm=(UL*)malloc(sizeof(UL)*n);
for(i=0;i<n;i++)
Lcm[i]=1;
for(i=0;i<n;i++)
{
m=0;
while((g=getchar())!=' ')
{
if(g==10)
continue;
m=(g-'0')+m*10;
}
num[i]=(UL*)malloc(sizeof(UL)*(m+1));
num[i][0]=m;
for(j=1;j<=num[i][0];j++)
{
m=0;
while((g=getchar())!=' ')
{
if(g==10)
break;
m=(g-'0')+m*10;
}
num[i][j]=m;
}
}
printf(\"**********OUTPUT**********\n\");
for(i=0;i<n;i++)
l(num[i],i);
free(num);
free(Lcm);
getch();
}
----------------解决方案--------------------------------------------------------
第二题:
[CODE]#include<stdio.h>
#include<string.h>
const int M=10000;
char a[M];
int main()
{
int i,len,sum;
while(gets(a),a[0]!='0')
{
sum=0;
for(i=0,len=strlen(a);i<len;i++)
sum+=a[i]-48;
if(sum>9)sum%=9;
if(sum==0)sum=9;
printf("%d\n",sum);
}
return 0;
}[/CODE]
C没有const int.......
还是用#define吧
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#define M 200
#define N 5000
long lcm(long m,long n)
{
long t,m1=m,n1=n;
if(m>n)
{
t=m;
m=n;
n=t;
}
while(n%m!=0)
{
t=n;
n=m;
m=t%m;
}
return m1/m*n1;
}
int main()
{
long i,j,n,a[M][N];
scanf("%ld",&n);
for(i=0;i<n;i++)
{
scanf("%ld",&a[i][0]);
for(j=1;j<=a[i][0];j++)
scanf("%ld",&a[i][j]);
}
for(i=0;i<n;i++)
{
long temp=1;
for(j=1;j<=a[i][0];j++)
temp=lcm(temp,a[i][j]);
printf("%ld\n",temp);
}
return 0;
}
to: 我不是郭靖
根据您的程序,我写了一段程序如下:但是总是不能运行,麻烦您帮我找一下好吗?谢谢您
#include<stdio.h>
#define U 20
#define V 50
int lcm(int m,int n)
{
int t,r,m1,n1;
m1=m;
n1=n;
if(m>n)
{
t=m;m=n;n=t;
}
while(n%m!=0)
{
r=n%m;
n=m;
m=r;
}
return m1*n1/r;
}
void main()
{
int a[U][V];
int i,j,n;
int temp=1;
printf("please input hangshu:\n");
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
scanf("%d ",&a[i][0]);
for(j=1;j<=a[i][0];j++)
scanf("%d ",&a[i][j]);
}
for(i=0;i<n;i++)
{
for(j=1;j<=a[i][0];j++)
temp=lcm(temp,a[i][j]);
printf("%d\n",temp);
}
}
----------------解决方案--------------------------------------------------------
第二题:
[CODE]#include<stdio.h>
#include<string.h>
const int M=10000;
char a[M];
int main()
{
int i,len,sum;
while(gets(a),a[0]!='0')
{
sum=0;
for(i=0,len=strlen(a);i<len;i++)
sum+=a[i]-48;
if(sum>9)sum%=9;
if(sum==0)sum=9;
printf("%d\n",sum);
}
return 0;
}[/CODE]
如果输入的不是数字字符呢,运行结果不会正确了
若a[0]='0' 就不会进入while循环
判断sum是否为0 不是多余的吗
还有,为什么sum为0时,输出9?
你的程序的意思是这样的吧
#include <stdio.h>
main()
{
long n;
printf("please input a number : ");
sacnf("%ld",&n);
n%=9;
printf("the result is %ld \n", n);
}
----------------解决方案--------------------------------------------------------
如果输入的不是数字字符呢,运行结果不会正确了//输入一个数难道还有非数字字符?
若a[0]='0' 就不会进入while循环 //输入结束的标志就是0
判断sum是否为0 不是多余的吗 //因为结果不可能为0
还有,为什么sum为0时,输出9?
你的程序的意思是这样的吧
#include <stdio.h>
main()
{
long n;
printf("please input a number : ");
sacnf("%ld",&n);
n%=9;
printf("the result is %ld \n", n);
}
你认为n肯定小于2^32吗,题目可没说,
要是输入11111111111111111111111111111111111111,
能得出正确结果吗......
----------------解决方案--------------------------------------------------------
第二题!呵呵!这方法可不是我想出来的!
#include<stdio.h>
int main(void)
{
char str[10];
int num = 0, i;
gets(str);
for(i = 0;i < 2;i ++)
{
num += str[i] - '0';
}
while(num > 10)
{
num = num/10 +num%10;
}
printf("%d\n", num);
return 0;
}
这个程序的意思和上个程序一样啊
比如 123
上个程序
123=100+20+3
100%9=1 20%9=2 3%9=3
(1+2+3)%9=6
这个
123=12+3=15=1+5=6
其中
12=10+2
10%9=1 2%9=2
可见,在这个题目中12和120一样,与后面的0没有关系
不如用%9,这样更简单
----------------解决方案--------------------------------------------------------
你知道sum不可能为0,还判断干什么啊
虽然输入数字一般不会有其它字符,但也是一个漏洞啊
----------------解决方案--------------------------------------------------------
你把那句去掉,输入18试试..............
----------------解决方案--------------------------------------------------------
对啊,是我错了,果然厉害啊
没考虑全,以后请多多指较
应该改成这样
#include <stdio.h>
main()
{
long n;
printf("please input a number : ");
sacnf("%ld",&n);
if(n!=0)
{
n%=9;
if(n==0) printf("the result is 9\n");
}
printf("the result is %ld \n", n);
}
不过你的程序如果一开始就输入0呢,什么提示也没有就结束了,别人怎么知道是什么情况啊
若错误的输入了字符呢
真的输入的数字很大的话,比如输入10000个9,那么sum=90000,溢出了
如果真的很大,可以把一个大数分成几位几位的数,再用循环解决就行了,不过好像没那个必要吧
----------------解决方案--------------------------------------------------------
对啊,是我错了,果然厉害啊
没考虑全,以后请多多指较
应该改成这样
#include <stdio.h>
main()
{
long n;
printf("please input a number : ");
sacnf("%ld",&n);
if(n!=0)
{
n%=9;
if(n==0) printf("the result is 9\n");
}
printf("the result is %ld \n", n);
}
不过你的程序如果一开始就输入0呢,什么提示也没有就结束了,别人怎么知道是什么情况啊
若错误的输入了字符呢
//偶只针对这个题目的输入来说,并假设输入是合法的,所以不考虑这些情况.
真的输入的数字很大的话,比如输入10000个9,那么sum=90000,溢出了
//vc的int是32位的,等同于long,不会溢出..
如果真的很大,可以把一个大数分成几位几位的数,再用循环解决就行了,不过好像没那个必要吧
----------------解决方案--------------------------------------------------------