c语言如果一个整数超出unsinged long的表示范围该怎么办

图片说明
输入一个数《1000 如果能被11....整除则显示
输入31 结果就是15个1
输入121 num和s溢出导致无限循环
1,怎么才能表示一个超过unsinged long界限的整数呢?
2.我看百度上有说可以用long double 的。如果用了,这里的整除判断 while(num%x!=0) 该怎么改写?

 #include<stdio.h>
int main(){
  int x;
  unsigned long s;
  int n = 1;
  unsigned long num = 1;
  scanf("%d",&x);
  while(num%x!=0) {
    printf("%lu can not divide %d\n", num,x);
    unsigned long temp;
    temp = num;
    num = 10*num + 1;
    n++; 
  }
  s = num/x;
  printf("%lu divide %d is %lu\n",num,x,s);

  return 0;
}

大数计算可以用字符串模拟,想要多大就多大

http://www.cnblogs.com/hugeNumber/articles/5376906.html

用字符数组进行输出,这样也方便输出,同时也摆脱了限制

大数计算可以用字符串模拟,想要多大就多大