程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> SDUT 1465 公共因子

SDUT 1465 公共因子

編輯:C++入門知識

公共因子 Time Limit: 1000MS Memory limit: 65536K 題目描述 假設字符串也有因數,一個字符串為s1,然後可以由n個字符串s2來表示,則稱s2是s1的因數。 如“ac”是“acac”的因數。 給兩個字符串,求它們的公因數有多少個。 輸入 多組數據,給定兩個字符串,s1,s2。長度不超過100000,並且不含空格。 輸出 每組數據一行,公因數有多少個。 示例輸入 acac ac aaa aa 示例輸出 1 1 提示 先對長度求公共因子   [cpp]  #include <stdio.h>   #include <string.h>   #include <math.h>   int a[1000000],b[1000000];   char s1[1000000],s2[1000000],s3[1000000];   int main()   {       int i,j,n,m,s,t,l1,l2,top,top1,x;       while(scanf("%s %s",s1,s2)!=EOF)       {           l1=strlen(s1);           s=0;           for(i=1,top=0;i<=l1;i++)           {               if(l1%i==0)               {                   a[top++]=i;               }           }           for(i=0,top1=0;i<=top-1;i++)           {               for(j=0;j<=a[i]-1;j++)               {                   s3[j]=s1[j];               }               if(a[i]==l1)               {                   b[top1++]=a[i];                   continue;               }               for(j=a[i];j<=l1-1;j+=a[i])               {                   for(x=0;x<=a[i]-1;x++)                   {                       if(s3[x]!=s1[j+x])                       {                           break;                       }                   }                   if(x!=a[i])                   {                       break;                   }               }               if(j==l1)               {                   b[top1++]=a[i];               }           }           l2=strlen(s2);           for(i=0;i<=top1-1;i++)           {               if(l2%b[i]==0)               {                   for(j=0;j<=l2-1;j+=b[i])                   {                       for(x=0;x<=b[i]-1;x++)                       {                           if(s1[x]!=s2[j+x])                           {                               break;                           }                       }                       if(x!=b[i])                       {                           break;                       }                   }                   if(j==l2)                   {                       s++;                   }               }           }           printf("%d\n",s);       }       return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved