2015-04-21 36 views
-3

我需要編寫一個程序,其中需要任意長度的數字,將其數字以相反的順序(例如從12365將使56321),並檢查這兩個數字是否可以從其所有數字分開。如果兩個數字都可以從每個數字中分開,那麼程序應該輸出兩個數字:給定數字和相反數字。目前我的程序只能反轉該號碼。有人可以幫我完成C編程任務嗎?

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main() 
{ 

    int i, m, n, atb = 0, nr = 1, skait = 0, j; 
    printf("Iveskite intervalo pradzia ir pabaiga:\n"); 
    scanf("%d", &m); 
    scanf("%d", &n); 
    //--- 
    for(i = m; i <= n; i++) 
    { 
     int temp = i; 
     int dalys[skait]; 
     do 
     { 

      atb = atb*10 + temp%10; 
      dalys[skait] = temp; 
      temp = temp/10; 
      skait++; 

     } 
     while (temp != 0); 
//------------------------------------------- 
     for(j = 1; j <= skait; j++){ 
      int dal = pow(10,(skait-1)); 

     } 



//------------------------------------------- 
     printf("\n%d skaicius: %d", nr, atb); 
     printf("\nSkaicius susideda is %d skaitmenu.", skait); 
     atb=0; 
     skait=0; 
     nr++; 

    } 




    return 0; 
} 

我已經開始嘗試解決後分割部分......但我不能找到如何使程序採取一切數字,讓它檢查分割部...

+0

如果需要,我可以將這些輸出信息更改爲英文。 –

+0

您可以將所有數字存儲在數組中,然後逐個使用數組檢查除法。 –

+0

您希望我們回答的技術問題是什麼?請查看幫助部分如何提出有關SO的問題。 –

回答

0

我也寫過這個版本!我覺得比以前更好!此解決方案使用比另一個回覆中的版本小的向量,並且不會造成無用的分割! :)此外,如果所請求的條件被驗證(其他地方爲0),函數compute()會返回1,那麼您可以輕鬆地將最終的printf移出主函數!

#include <stdio.h> 
#include <stdint.h> 
#include <stdlib.h> 
#include <string.h> 
#define SEESTEPS 
#ifdef SEESTEPS 
#define Dprintf(a...) printf(a); 
#else 
#define Dprintf(a...) ; 
#endif 

int compute(uint64_t x,int zeroGo) 
{ 
    uint64_t y,z,t; 
    int div[10]; 
    int cntdiv,i; 

    for(i=0;i<10;i++) 
     div[i]=0; 

    z=x;y=0;cntdiv=0; 
    while(z) { 
     t=(z%10); 
     if (!div[t]) { 
      cntdiv++; 
      div[t]=1; 
     } 
     y*=10;y+=t; 
     z/=10; 
    } 

    Dprintf("%lu => Inverted %lu\n",x,y); 

    if (zeroGo || !div[0]) { 
     t=div[0]; 
     for(i=1;i<10;i++) { 
      if (!div[i]) 
       continue; 
      Dprintf("%lu mod %d = %lu\n",x,i,x%i); 
      if ((x%i)) 
       break; 
      Dprintf("%lu mod %d = %lu\n",y,i,y%i); 
      if ((y%i)) 
       break; 
      t++; 
     } 
    } else { 
     t=cntdiv-1; 
    } 

    //Dprintf("%d %d -",cntdiv,t); 
    if ((int)t==cntdiv) { 
     printf("%lu %lu\n",x,y); 
     return 1; 
    } 

    return 0; 
} 

int main(void) { 
    uint64_t f,t; 
    int cnt=0; 

    printf("From...: "); 
    scanf("%lu",&f); 
    printf("To.....: "); 
    scanf("%lu",&t); 

    for(;f<=t;f++) 
     cnt+=compute(f,1); 

    printf("%d\n",cnt); 

    return 0; 
} 
+0

@MantasDaškevičius。另請參閱此評論上方的新版本! –

0

試試這個!它應該按照你的要求運行!如果您對代碼#define SEESTEPS發表評論,則代碼僅打印所需的結果!此代碼在計算時只能計算一個數字,您可以將其轉換爲函數!

#include <stdio.h> 
#include <stdint.h> 
#include <stdlib.h> 

#define SEESTEPS 
#ifdef SEESTEPS 
#define Dprintf(a...) printf(a); 
#else 
#define Dprintf(a...) ; 
#endif 

int main(void) { 
    uint64_t x,y,z; 
    uint64_t div[20]; 
    int cntdiv,i; 

    scanf("%lu",&x); 

    /* This inverts the number and computes the digit */ 
    z=x;y=0;cntdiv=0; 
    while(z) { 
     div[cntdiv]=(z%10); 
     y*=10;y+=div[cntdiv]; 
     z/=10;cntdiv++; 
    } 

    Dprintf("Inverted %lu\n",y); 
    /* This verifies the divisibility! */ 
    for(i=0;i<cntdiv;i++) { 
     if (!div[i]) 
      continue; /* Or break; if you prefer */ 
     Dprintf("%lu mod %lu = %lu\n",x,div[i],x%div[i]); 
     if ((x%div[i])) 
      break; 
     Dprintf("%lu mod %lu = %lu\n",y,div[i],y%div[i]); 
     if ((y%div[i])) 
      break; 
    } 

    if (i==cntdiv) 
     printf("%lu %lu",x,y); 

    return 0; 
} 
相關問題