关于一个C语言的小程序!求解答!该怎么解决

关于一个C语言的小程序!求解答!
首先是一个小程序题,
题目:请在整数n=742683613984中删除8个数字,使得余下的数字按原次序组成的新数最小。要求如下:
(1)整数n和删除数字的个数“8”在源程序中完成赋值,程序直接输出运行结果;
(2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最小数。
(提示:整数n可以以字符数组的方式定义、赋值和处理)
然后是我自己写的代码:
#include<stdio.h>
#include<string.h>

void main()
{
long n = 742683613984;
int i, j;
char a[12];
sprintf(a, "%d", n);
char temp[1] = "0";

for(i=8; i<12; i++)
{
for(j=8; j<12-i; i++)
{
if( (int)a[j] >= (int)a[j+1] )
{
strcpy(temp, a+j+1);
strcpy(a+j+1, a);
strcpy(a+j, temp);
}
}
}

printf("删除的8个数为前八位和删除后的最小数\n");
for(i=0; i<8; i++)
{
printf("%c", a[0]);
}

printf(", ");

for(j=8; j<12; j++)
{
printf("%c");
}
}

不过不知道怎么回事,出错了
D:\6A_2.c(7) : warning C4305: 'initializing' : truncation from 'const __int64 ' to 'long '
D:\6A_2.c(11) : error C2143: syntax error : missing ';' before 'type'
D:\6A_2.c(19) : error C2065: 'temp' : undeclared identifier
D:\6A_2.c(19) : warning C4047: 'function' : 'char *' differs in levels of indirection from 'int '
D:\6A_2.c(19) : warning C4024: 'strcpy' : different types for formal and actual parameter 1
D:\6A_2.c(21) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
D:\6A_2.c(21) : warning C4024: 'strcpy' : different types for formal and actual parameter 2
Error executing cl.exe.

不知道错在哪。。。

然后就是顺便问下,转换的问题了,主要是整数转字符,字符转整数的,整型数组转整数的(把数组里面的数连接起来)
跪求答案。。。。。。真心感谢了
6A_2.exe - 2 error(s), 5 warning(s)

------解决方案--------------------
首先第一点:将6A_2.c修改成6A_2.cpp;
然后将
char temp[1] = "0";
改成
char temp[64] = "0";
至于逻辑问题,自己调试一下好了.
------解决方案--------------------
C/C++ code
#include<stdio.h>
#include<string.h>

void main()
{
    long n = 742683613984;
    int i, j;
    char a[12];
    char temp[64] = "0";

    sprintf(a, "%d", n);

    for(i=8; i<12; i++)
    {
        for(j=8; j<12-i; i++)
        {
            if( (int)a[j] >= (int)a[j+1] )
            {
                strcpy(temp, a+j+1);
                strcpy(a+j+1, a);
                strcpy(a+j, temp);
            }
        }
    }

    printf("删除的8个数为前八位和删除后的最小数\n");
    for(i=0; i<8; i++)
    {
        printf("%c", a[0]);
    }

    printf(", ");

    for(j=8; j<12; j++)
    {
        printf("%c");
    }
}

------解决方案--------------------
没看懂你的算法,其它问题可以指正一下:
 long n = 742683613984; //<<< long型装不下这个大数,得用 long long int 也就是 __int64类型才装得下

 char a[12]; //<<<长度不足,差了一个字符长度,因为有一个结束\0

 sprintf(a, "%d", n);//<<< "%d"格式只会打出int,不出打出 __int64 型
 
不如一开始就定义成串型:
char a[] = "742683613984";// 这样就不必常量数转存整数变量,又转成字符

------解决方案--------------------
按你的题意,我自己写个算法:
C/C++ code

#include<stdio.h>
 char delfun(char arr[])
 {
     char ret;
     int i;
     ret = arr[0];
     if(arr[0]=='\0')
         return ret;
     if(arr[1]=='\0')
     {
         arr[0]='\0';
         return ret;
     }
     i=0;
     do
     {
         if(arr[i]>arr[i+1])
         {
             ret = arr[i];
             strcpy(&arr[i],&arr[i+1]);
             return ret;
         }
         else
         i++;
     }while(1);
     return 0;    
 }
 
 void main()
 {
     char a[23] = "742683613984";
     char temp[23] = {0};
     int i,k = 8;
     printf("请输入一个大的整数:");
     scanf("%22[0-9]",a);
     fflush(stdin);
     printf("请输入要删除的数字个数(1-%d):",strlen(a)-1);
     scanf("%2d",&k);
     for(i=0; i< k; i++)
     {
         temp[i] = delfun(a);
         printf("当前删除数字:%c,得到最小数:%s\n",temp[i],a);//输出以便验证算法
     }
     printf("删除的%d个数次序及删除后的最小数为\n",k);
     for(i=0; i<k; i++)
     {
         printf("%c,",temp[i]);
     }
     printf("%s",a);
 }