char* makeAho(int i, bool show)
{
  char* data[] = {"いち","に","さん","よん","ご","ろく","なな","はち","きゅう"};
  char* digit_data[] = {"じゅう","ひゃく","せん","まん"};
  char buf[1024] = "";
  int digit = 1, j = 0;
  bool contain3 = false;
  while((i / (10*digit) != 0)){
    digit = (digit == 1) ? digit + 9: digit * 10;
    j++;
    if( ( i - (i/digit)*digit) / (digit/10) == 3 || i/digit == 3)
      contain3 = true;
  }
  if( show || i > 0 && ( i % 3 == 0 || contain3)){
    if( i < 10 ){
      if(i > 0)strcat(buf,data[i-1]);
    }
    else{
      if(i / (digit) != 1)
        strcat(buf, data[(i / (digit)) - 1]);
      strcat(buf,digit_data[j-1]);
      strcat(buf,makeAho(i - (i/(digit))*digit, true));
    }
    if(!show)strcat(buf,"!");
  }
  else
    sprintf(buf,"%d",i);
  return buf;
}
しょぼいけど。99999までいけます。