A. 求1-100之間的同構數。c語言。 謝謝
#include <stdio.h>
int main()
{
int i,n,t;
for(i=1;i<100;++i)
{
for(n=i*i,t=i;t;t/=10,n/=10)
if(n%10!=t%10)
break;
if(!t)
printf("%d ",i);
}
return 0;
}
B. C語言編程100以內所有的同構數
#include<iostream.h>
#include<iomanip.h>
int main ()
{
int i,j,m,n,x,y,z,k,a;
for(i=1;i<=9;i++)//判斷1-9之間同構數
{
m=i*i;
n=m-i;
if(n%10==0)
cout<<setw(4)<<i;
}
for(j=10;j<=99;j++)//判斷10-99之間同構數
{
x=j*j;
y=x-j;
z=y/10;
if((y%10==0)&&(z%10==0))
cout<<setw(4)<<j;
}
for(k=100;k<=100;k++)//判斷100是否為同構數
{
x=j*j;
y=x-j;
z=y/10;
a=y/100;
if((y%10==0)&&(z%10==0)&&(a%10==0))
cout<<setw(4)<<k;
}
cout<<endl;
return 0;
}
這個演算法麻煩點,比較直觀!
C. c語言編一個程序,求2~999之間所有的同構數
程序如下:
#include<stdio.h>
void main()
{
int i,square;
for(i=2;i<10;i++)/*求一位數的同構數*/
{square=i*i;
if(square%10==i)
printf("%d ",i);
}
for(i=10;i<100;i++)/*求兩位數的同構數*/
{
square=i*i;
if(square%100==i)
printf("%d ",i);
}
for(i=100;i<1000;i++)/*求三位數的同構數*/
{
square=i*i;
if(square%1000==i)
printf("%d ",i);
}
D. C語言求同構數
1、演算法分析:
對指定范圍內的每一個整數a,求出其平方,判斷a是否是其平方的尾部,通常有以下方法:
通過字元串子串比較找出同構數。
為了求更高位數的同構數,可應用同構數的以下性質:一個m位同構數的尾部m-1位數也是一個同構數。道理很簡單
,a是一個m位數,a的平方數尾部的m-1位僅由a尾部的m-1位決定而與a的最高位無關。
易知一個同構數有三個:1,5,6,則二位同構數的個位數字只可能是1,5,6這三個數字。
根據這一思路,我們可應用遞推求出多位同構數串。
2.求指定區間內的同構數
程序代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *right(char *ms,int len); /*截取一個字元串尾部長為len個字元的子串*/
void main()
{
long a;
int len;
char as[10];
char ms[20];
printf("求[1,10000]中的同構數:\n");
for(a=1;a<=10000;a++)
{
ultoa(a,as,10); /*數a轉換為字元串,存入as*/
len=strlen(as);
ultoa(a*a,ms,10);
if(strcmp(as,right(ms,len))==0) /*比較字元串as與ms長為len的子串是否相等*/
printf("%s 其平方為 %s\n",as,ms); /*相等就是同構數,輸出結果*/
}
}
char *right(char *ms,int len) /*截取字元串尾部長為len子串的函數*/
{
int i,j;
for(i=0;i<(signed)strlen(ms);ms++);
for(j=0;j<len;j++,ms--);
return ms;
}
E. c語言 打出1~1000所有的同構數
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *right(char *ms,int len); /*截取一個字元串尾部長為len個字元的子串*/
void main()
{
long a;
int len;
char as[10];
char ms[20];
printf("求[1,10000]中的同構數:\n");
for(a=1;a<=10000;a++)
{
ultoa(a,as,10); /*數a轉換為字元串,存入as*/
len=strlen(as);
ultoa(a*a,ms,10);
if(strcmp(as,right(ms,len))==0) /*比較字元串as與ms長為len的子串是否相等*/
printf("%s 其平方為 %s\n",as,ms); /*相等就是同構數,輸出結果*/
}
system("pause");
}
char *right(char *ms,int len) /*截取字元串尾部長為len子串的函數*/
{
int i,j;
for(i=0;i<(signed)strlen(ms);ms++);
for(j=0;j<len;j++,ms--);
return ms;
}
F. c語言程序計算1~500之間的全部「同構數」之和。
#include"stdio.h"
void main()
{
int n,he=0,a=0;
double pingfang;
for(n=4;n<10;n++)
{
pingfang=n*n;
if((pingfang-n)%10==0) /*如果這個數是個位數,那麼如果它的平方數減去它之後能夠被10整除,就是同構數,比如6,平方是36,減去6後是30,除以10結果為3。而按照你的說法想要是同構數,那麼至少這個數的平方要大於10,所以從4開始*/
{
printf("%5d",n);
he+=n;
a++; /*計數器,控制每行輸出5個同構數*/
if(a%5==0)
printf("\n");
}
}
for(n=10;n<100;n++)
{
pingfang=n*n;
if((pingfang-n)/100==0) /*同理,如果是同構數,那麼它的平方減去本身除以100也能被整除,因為平方數小於一百的部分已經完全被減去了*/
{
printf("%5d",n);
he+=n;
a++;
if(a%5==0)
printf("\n");
}
}
for(n=100;n<=500;n++)
{
pingfang=n*n;
if((pingfang-n)/1000==0) /*同理,如果是同構數,就能被1000整除*/
{
printf("%5d",n);
he+=n;
a++;
if(a%5==0)
printf("\n");
}
}
printf("1到500之間所有的同構數之和為:%5d\n",he);
}
G. C語言 編寫同構數
//---------------------------------------------------------------------------
#include
<stdio.h>
int
main(void)
{
int
i;
for
(i=1;
i<100;
i++)
if
(i==(i*i)%(i<10?10:100))
printf("%d
",i);
return
0;
}
//---------------------------------------------------------------------------
H. c語言編程:找出1到1000的全部同構數
#include<stdio.h>
intIsTongGou(inta){//判斷是否同構
intb=a*a;
while(a!=0){
if(b%10!=a%10){
return0;
}else{
b=b/10;
a=a/10;
}
}
return1;
}
intmain(){
for(inti=1;i<1000;i++){
if(IsTongGou(i)){
printf("%d",i);
}
}
printf(" ");
}
I. C語言問題---同構數
#include <stdio.h>
#include <conio.h>
int main(void)
{
int a,b,result[100],i,j,l;
int k=0;
printf("please input two number(0-99)");
scanf("%d%d",&a,&b);
for(i=b*b;i>=a;i--)
{
for(j=a;j<=b;j++)
{
if(i==j*j &&(j==(i%10)||j==(i%100)))
{
result[k]= j;
k++ ;
}
}
}
printf("the result is:\n");
for(l=k-1;l>=0;l--)
printf("%d\n",result[l]);
getch();
return 0;
}
J. 用c語言列印出2―99之間的同構數
#include<stdio.h>
int main()
{
long i,j,k;
k=10;
for (i=1;i<=99;i++)
{
if (i==k)
k*=10;
j=i*i;
if(j%k==i)
printf("%ld\t%ld\n",i,j);
}
}